Answers:
而且,简单一点。
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
map
),因为我非常喜欢这个!
Hash#values
不仅更简单,而且效率更高。比较time ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'
有time ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'
我会用:
hash.map { |key, value| value }
Hash#values
。
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
接受一个块,并在可枚举的每个元素上返回一次运行该块的结果的数组。因此,此代码仅忽略键并返回所有值的数组。
该Enumerable
模块非常棒。很好地了解它可以为您节省大量时间和代码。
hash.values
这里最终是正确的答案。
hash.map(&:second)
:)
hash = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
就这么简单
hash.values
#=> [["a", "b", "c"], ["b", "c"]]
这将返回一个新数组,其中填充了哈希值
如果要存储该新数组,请执行
array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]
array_of_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
是更好的IMO)。但是我想指出的是,当您向其提供块时Hash#each
,它将仅返回哈希的完整值。如果要对每个项目进行操作并将其作为数组返回,请使用Hash#collect
或其别名Hash#map
。有关Enumerables的更多信息,请点击此处。