2014-07-16 77 views
0

我在學習上Codecademy網站Ruby和我有這個problem麻煩選擇:從哈希

創建一個新的變量,good_movies,並設置它等於 調用。選擇的結果movie_ratings,只選擇電影評級 嚴格大於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

這是正確的,在該說明:「創建一個新的變量,good_movies,並設置它等於調用的結果** **選擇上movie_ratings ,只選擇評分嚴格大於3的電影「。你用過。每個。 – infused

回答

2

使用Hash#select按照條件過濾,而不是Hash#each

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

基本上Hash#each返回在其上把它稱爲接收器,並在你的情況下,原來的哈希movie_ratings。確實它包含memento鍵,正如我所說的,Hash#each不適用於過濾的目的。但是Hash#select將從輸出Hash中過濾出memento的值,因此您的代碼不會給出任何異議。

+0

謝謝,它工作。然而,即便如此,爲什麼我的代碼不包括「紀念品」呢? – Haque1

+0

@ Haque1,因爲您使用了'movie_ratings.each'而不是'movie_ratings.select'。 – infused

+0

仍然,v> 3條件不會過濾掉任何值<= 3? – Haque1

1

您必須改變eachselect這樣的:good_movies = movie_ratings.select {|k,v| v > 3}