【问题标题】:Update values in a hash更新哈希值
【发布时间】:2019-05-19 11:57:49
【问题描述】:

我试图在将值减去三后更新我的哈希值。例如,

extinct_animals = {
  "Passenger Pigeon" => 1914,
  "Tasmanian Tiger" => 1936,
  "Eastern Hare Wallaby" => 1890,
  "Dodo" => 1662,
  "Pyrenean Ibex" => 2000,
  "West African Black Rhinoceros" => 2011,
  "Laysan Crake" => 1923
}

我有这段代码,它将值设置为减去三:

extinct_animals.each {|animal, year| puts year - 3}

和输出:

1911
1933
1887
1659
1920

如何返回包含键和新值的整个哈希?

【问题讨论】:

  • @anothermh,一个骗子?是的,我认为是这样,但它很好地说明了出于这个原因关闭问题的陷阱。在这种情况下,方法transform_values! 直到最初的问题被提出八年后才会进入 Ruby 核心。此外,我们都看到提供的问题的答案远远优于先前问题的答案。当然,最好的答案总是可以添加到被欺骗问题的答案中,但它不会有太多的可见性,特别是当像这里一样,被欺骗的问题是古老的。我没有答案,但这是个问题。
  • @CarySwoveland 我更希望看到这个问题作为重复问题关闭,这样用户就会被引导到上面链接的那个,在那里你会发现transform_values 作为第二高的投票答案,得分为 61。它似乎该答案的“可见性”问题不存在;我不同意关闭这个有任何问题。
  • 我没有注意到这个答案,它是在问题 wss 发布八年后提交的,但是是的,你说得有道理。

标签: ruby hash each


【解决方案1】:

在区块内,确保您使用=修改哈希:

extinct_animals.each { |animal, year| extinct_animals[animal] = year - 3 }
=> {
  "Passenger Pigeon" => 1911,
  "Tasmanian Tiger" => 1933,
  "Eastern Hare Wallaby" => 1887,
  "Dodo" => 1659,
  "Pyrenean Ibex" => 1997,
  "West African Black Rhinoceros" => 2008,
  "Laysan Crake" => 1920
}

不要使用puts。这只是写到控制台。

此解决方案的更简短版本是:

extinct_animals.each { |animal, _year| extinct_animals[animal] -= 3 }

这里我们在year前加上下划线表示该变量没有在块中使用。

【讨论】:

    【解决方案2】:

    您会想要使用在 MRI v2.4 中首次亮相的Hash#transform_values!

    extinct_animals.transform_values! { |v| v - 3 }
      #=> {"Passenger Pigeon"=>1911, "Tasmanian Tiger"=>1933,
      #    "Eastern Hare Wallaby"=>1887, "Dodo"=>1659, "Pyrenean Ibex"=>1997,
      #    "West African Black Rhinoceros"=>2008, "Laysan Crake"=>1920}
    
    extinct_animals
      #=> {"Passenger Pigeon"=>1911, "Tasmanian Tiger"=>1933,
      #    "Eastern Hare Wallaby"=>1887, "Dodo"=>1659, "Pyrenean Ibex"=>1997,
      #    "West African Black Rhinoceros"=>2008, "Laysan Crake"=>1920}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2016-12-26
      • 2014-04-13
      相关资源
      最近更新 更多