我有这个:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
我想说到这个: [["a","b","c"],["b","c"]]
[["a","b","c"],["b","c"]]
这似乎应该有效,但事实并非如此:
hash.each{|key,value| value} => {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
有什么建议吗?
hash.collect { |k, v| v } #returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect 接受一个块,并返回对枚举的每个元素运行一次该块的结果的数组。所以这段代码只是忽略键并返回一个包含所有值的数组。
Enumerable#collect
Enumerable模块非常棒,熟悉它可以节省大量的时间和代码。
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,并将其作为块传递给方法。
&
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"]]