gpt4 book ai didi

ruby - .each_with_object ruby 解释?

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

下面,我们得到一个名为 win_lose 的数组。我们应该创建一个看起来像下面的哈希的哈希。我最初的想法是使用 .count 做一些事情,但在尝试了答案之后,.each_with_object 的效果最好。

有人可以为我详细说明 .each_with_object 方法在做什么以及答案本身吗?我得到了答案并通过阅读文档找到了答案,但仍然需要对方法本身进行解释......

谢谢!

win_lose = ["win", "lose", "win", "lose", "win", "win"]

基于 win_lose 数组创建哈希,如下所示:

 win_loss_count = {
"win" => 4,
"loss" => 2
}

这是我最初尝试但没有成功的方法:

win_loss_count = Hash[win_lose.map.with_index { |outcome, times| outcome = times.count }]

回答:

win_loss_count = win_lose.each_with_object(Hash.new(0)) { |word,counts| counts[word] += 1 }

最佳答案

each_with_object 字面意思就是它所说的。它类似于 each,但每次都有一个额外的对象。

所以对于这个:

win_lose.each_with_object(Hash.new(0)) { |word,counts| counts[word] += 1 }

您正在调用 each,并且每次都会传入通过 Hash.new(0) 创建的对象。 word 是您在普通 each 中得到的单词,counts 是指“with_object”的“对象”(因此,哈希)。

此快捷方式的重要之处在于 Hash.new(0)。这意味着创建一个新的空散列,其中 0 作为所有以前不存在的键的值,这使您可以执行 counts[word] += 1 即使它以前不存在。

最后,each_with_object 返回“object”,因此返回 counts,并针对每个单词进行了修改。

关于ruby - .each_with_object ruby 解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634897/

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