Ruby Hash 转换为值数组

我有这个:

hash  = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }

我想说到这个: [["a","b","c"],["b","c"]]

这似乎应该有效,但事实并非如此:

hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}

有什么建议吗?

209553 次浏览
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]

Enumerable#collect 接受一个块,并返回对枚举的每个元素运行一次该块的结果的数组。所以这段代码只是忽略键并返回一个包含所有值的数组。

Enumerable模块非常棒,熟悉它可以节省大量的时间和代码。

还有,简单一点。

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]

我是 Ruby Doc

我会用:

hash.map { |key, value| value }
hash  = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]

还有这个:

hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]

原因:

&在对象上调用 to_proc,并将其作为块传递给方法。

something {|i| i.foo }
something(&:foo)

这很简单

hash.values
#=> [["a", "b", "c"], ["b", "c"]]

这将返回一个由 hash 中的值填充的新数组

如果你想存储新的数组

array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]


array_of_values
#=> [["a", "b", "c"], ["b", "c"]]