我有这个:
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"]}
有什么建议吗?
答案 0 :(得分:235)
另外,有点简单......
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
答案 1 :(得分:36)
我会用:
hash.map { |key, value| value }
答案 2 :(得分:21)
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
接受一个块,并在枚举的每个元素上返回一次运行块的结果数组。所以这段代码只是忽略了键并返回了所有值的数组。
Enumerable
模块非常棒。了解它可以为您节省大量时间和大量代码。
答案 3 :(得分:7)
hash = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
答案 4 :(得分:4)
就像
一样简单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"]]
答案 5 :(得分:2)
还有这一个:
hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]
为什么会这样:
&
调用对象上的to_proc
,并将其作为块传递给方法。
something {|i| i.foo }
something(&:foo)