2010-11-03 21 views
4

我想找到一些優雅的方式來實現這一點。也許像下面這樣:Ruby:如何過濾哈希結構以獲得所有<>「1」的密鑰?

hash={"1"=>"1","2"=>"2"} 
r=[] 
hash.each do |k,v| 
    if k!="1" 
     r<<k 
    end 
end 
puts r 

任何更好的方法來實現這一目標?

+1

您是否想要鍵值爲<>'1'的鍵值對,還是您想要鍵<>'1'中的所有鍵?如果你想要的鍵值對,我會使用散列hash.select/hash.reject,如果你想要的鍵,使用hash.keys.select/hash.keys.reject。 – 2010-11-03 18:05:31

回答

12

您可以使用 「陣列的區別」在選擇無線因爲它更具可讀性,所以是否定的測試。 「在X =='1'爲真的情況下拒絕值」與「在x!='1'爲真的情況下收集值」。

+0

一分鐘前我很驚訝,但它不僅更短,而且更快) – Nakilon 2010-11-03 21:04:27

+0

我還沒有真正測量過,但我希望選擇/拒絕速度更快。 :) – 2010-11-04 08:24:04

1

這裏有一種方法:

hash.keys - ['1'] 
#=> ["2"] 
+0

選擇返回一個散列,而不是散列的鍵。小的區別,但原來的問題要求鑰匙。 – 2010-11-03 18:03:57

+0

好抓!謝謝你指出,傑森。 – 2010-11-03 19:45:26

3
puts r = hash.keys.select { |i| i != "1" } 
0
hash.reject{|k,v| k == "1"} 

我想拒絕:

r = hash.select { |k,v,| k != "1" } 
puts r 

希望這有助於

相關問題