下面,我们给出一个名为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返回"对象",因此counts返回,已针对每个单词进行了修改.
| 归档时间: | 
 | 
| 查看次数: | 960 次 | 
| 最近记录: |