代码之家  ›  专栏  ›  技术社区  ›  troelskn

哈希->数组的复杂转换

  •  1
  • troelskn  · 技术社区  · 15 年前

    我有这样的结构:

    {:foo => ['foo1', 'foo2'], :bar => ['bar1']}
    

    我希望将其转化为:

    [[:foo, "foo1"], [:foo, "foo2"], [:bar, "bar1"]]
    

    我目前的解决方案势在必行:

    result = []
    h.each do |k,v|
      v.each do |value|
        result << [k, value]
      end
    end
    

    虽然这是可行的,但我确信有一种更优雅的方式来写这篇文章,但我想不出来。我想知道面向函数的解决方案是什么样子的?

    2 回复  |  直到 15 年前
        1
  •  7
  •   sepp2k    15 年前
    h.inject([]) do |arr, (k,v)|
      arr + v.map {|x| [k,x] }
    end
    
        2
  •  0
  •   newacct    15 年前

    像这样的怎么样?我希望有一些东西可以将一组数组添加到一起,但我不知道有什么,所以我实现了自己的数组。

    class Array
      def concatArrays # concatenates an array of arrays
        inject([]) {|acc, x| acc + x}
      end
    end
    
    h.collect{|k,v| v.collect{|value| [k,value]}}.concatArrays