Ruby数组的哈希和map函数

Aut*_*ico 0 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.
Run Code Online (Sandbox Code Playgroud)

我想创建一个新数组,它是最后一个数组的副本,除了我删除任何:bar条目.

my_array2 = [{foo:1,baz:3},{foo:2,baz:495,foo_baz:"some_string"},...]
Run Code Online (Sandbox Code Playgroud)

我可以my_array2这样做:

my_array2 = my_array.map{|h| h.delete(:bar)}
Run Code Online (Sandbox Code Playgroud)

但是,这会改变原作my_array,我想保持不变.

有没有办法做到这一点,而不必先复制my_array?

小智 5

完成此任务的众多方法之一:

my_array2 = my_array.map{|h| h.reject{|k,v| k == :bar}}
Run Code Online (Sandbox Code Playgroud)

  • 我会说[Hash#reject](http://www.ruby-doc.org/core-2.1.1/Hash.html#method-i-reject)是专门为此而建的.一个小细节:我会把`reject`的块变量`| k,_ |`强调你只使用密钥的事实(正如我看到@Santosh所做的那样). (2认同)