更新哈希值

jmk*_*929 2 ruby hash each

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

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
}
Run Code Online (Sandbox Code Playgroud)

我有这个代码,它设置值减去三:

extinct_animals.each {|animal, year| puts year - 3}
Run Code Online (Sandbox Code Playgroud)

和输出:

1911
1933
1887
1659
1920
Run Code Online (Sandbox Code Playgroud)

如何使用键和新值返回整个哈希值?

Car*_*and 5

你会想要使用Hash#transform_values!,它在MRI v2.4中首次亮相:

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}
Run Code Online (Sandbox Code Playgroud)