Ruby数组的哈希和map函数

时间:2014-05-08 14:01:24

标签: ruby arrays hash

我有一系列哈希,像这样:

my_array = [{foo:1,bar:"hello",baz:3},{foo:2,bar:"hello2",baz:495,foo_baz:"some_string"},...] 
#there can be arbitrary many in this list.
#There can also be arbitrary many keys on the hashes.

我想创建一个新数组,它是最后一个数组的副本,但我删除了所有:bar条目。

my_array2 = [{foo:1,baz:3},{foo:2,baz:495,foo_baz:"some_string"},...]

我可以通过这样做来获得my_array2

my_array2 = my_array.map{|h| h.delete(:bar)}

但是,这会更改原始的my_array,我希望保持不变。

有没有办法这样做而不必先复制my_array?

2 个答案:

答案 0 :(得分:5)

实现这一目标的众多方法之一:

my_array2 = my_array.map{|h| h.reject{|k,v| k == :bar}}

答案 1 :(得分:2)

my_array.map {|h| h.select{|k, _| k != :bar} }
# => [{:foo=>1, :baz=>3}, {:foo=>2, :baz=>495, :foo_baz=>"some_string"}]