我正在学习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”条件会将其过滤掉;我做错了什么?
答案 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
进行更改select
:good_movies = movie_ratings.select {|k,v| v > 3}