我有一系列哈希,像这样:
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?
答案 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"}]