如何reject!与reject从不同delete_if的HashRuby的?任何人都可以用简单的代码片段解释它们之间的差异吗?
And*_*nes 13
由于其他答案是指的,Array#delete_if而不是Hash#delete_if,这似乎是你所要求的,我想我应该澄清.
正如其他人所指出的那样,reject并且reject!在不同的reject!版本修改就地散,同时reject创建一个新的哈希值.同时delete_if是几乎一样的reject!.
其实,对于一个Array,reject!并且delete_if是正好相同.
然而,对于a Hash,它们略有不同.如果没有进行任何更改则reject!返回,nil如果进行了更改则返回哈希.delete_if总是返回哈希值.
hash = {a: 1, b: 2, c: 3}
return_value = hash.delete_if {|k, v| v > 100}
# hash is unchanged, return_value is {a: 1, b: 2, c: 3}
return_value = hash.reject! {|k, v| v > 100}
# hash is unchanged, return_value is nil
Run Code Online (Sandbox Code Playgroud)
因此,如果要在删除元素后检查是否对哈希进行了更改,则可以使用reject!并检查返回值.