gpt4 book ai didi

ruby - `Hash#reject!` 和 `Hash#reject` 与 `Hash#delete_if` 有何不同?

转载 作者:数据小太阳 更新时间:2023-10-29 07:41:07 29 4
gpt4 key购买 nike

对于 Ruby 中的 Hashreject!rejectdelete_if 有何不同?谁能用简单的代码片段解释它们之间的区别?

最佳答案

由于其他答案指的是 Array#delete_if 而不是 Hash#delete_if,这似乎是你要问的,我想我应该澄清一下。

正如其他人所指出的,rejectreject! 的不同之处在于 reject! 版本就地修改哈希,而 reject 创建一个新的散列。同时,delete_if 几乎reject! 相同。

事实上,对于一个Arrayreject!delete_if 完全是一样的。

但是,对于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

所以如果你想检查删除元素后哈希值是否发生变化,你可以使用reject!并检查返回值。

关于ruby - `Hash#reject!` 和 `Hash#reject` 与 `Hash#delete_if` 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307573/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com