从哈希中选择

时间:2014-07-16 21:04:20

标签: ruby

我正在学习Ruby on Codecademy,我遇到了这个问题problem

  

创建一个新变量good_movies,并将其设置为等于结果   在movie_ratings上调用.select,只选择具有评级的电影   严格大于3。

这是我的代码:

movie_ratings = {
  memento: 3,
  primer: 3.5,
  the_matrix: 5,
  truman_show: 4,
  red_dawn: 1.5,
  skyfall: 4,
  alex_cross: 2,
  uhf: 1,
  lion_king: 3.5
}
# Add your code below!
good_movies = movie_ratings.each {|k,v| v > 3}

结果如下:

{:memento=>3, :primer=>3.5, :the_matrix=>5, :truman_show=>4, :red_dawn=>1.5, :skyfall=>4, :alex_cross=>2, :uhf=>1, :lion_king=>3.5} 

这是我得到的错误:

  

哎呀,再试一次。看起来good_movies包括纪念品,但它   不应该。

“memento”的值为3,我认为我的“v> 3”条件会将其过滤掉;我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用Hash#select按条件进行过滤,而不是Hash#each

movie_ratings.select {|k,v| v > 3}

基本上Hash#each会返回您调用它的接收者,在您的情况下,它会返回原始哈希movie_ratings。实际上它包含memento密钥,正如我所说,Hash#each不是过滤目的。但是Hash#select会将memento的值从输出Hash中过滤掉,因此您的代码不会反对。

答案 1 :(得分:1)

您必须对此each进行更改selectgood_movies = movie_ratings.select {|k,v| v > 3}