我想找到一些優雅的方式來實現這一點。也許像下面這樣:Ruby:如何過濾哈希結構以獲得所有<>「1」的密鑰?
hash={"1"=>"1","2"=>"2"}
r=[]
hash.each do |k,v|
if k!="1"
r<<k
end
end
puts r
任何更好的方法來實現這一目標?
我想找到一些優雅的方式來實現這一點。也許像下面這樣:Ruby:如何過濾哈希結構以獲得所有<>「1」的密鑰?
hash={"1"=>"1","2"=>"2"}
r=[]
hash.each do |k,v|
if k!="1"
r<<k
end
end
puts r
任何更好的方法來實現這一目標?
您可以使用 「陣列的區別」在選擇無線因爲它更具可讀性,所以是否定的測試。 「在X =='1'爲真的情況下拒絕值」與「在x!='1'爲真的情況下收集值」。
一分鐘前我很驚訝,但它不僅更短,而且更快) – Nakilon 2010-11-03 21:04:27
我還沒有真正測量過,但我希望選擇/拒絕速度更快。 :) – 2010-11-04 08:24:04
這裏有一種方法:
hash.keys - ['1']
#=> ["2"]
選擇返回一個散列,而不是散列的鍵。小的區別,但原來的問題要求鑰匙。 – 2010-11-03 18:03:57
好抓!謝謝你指出,傑森。 – 2010-11-03 19:45:26
puts r = hash.keys.select { |i| i != "1" }
hash.reject{|k,v| k == "1"}
我想拒絕:
r = hash.select { |k,v,| k != "1" }
puts r
希望這有助於
本
您是否想要鍵值爲<>'1'的鍵值對,還是您想要鍵<>'1'中的所有鍵?如果你想要的鍵值對,我會使用散列hash.select/hash.reject,如果你想要的鍵,使用hash.keys.select/hash.keys.reject。 – 2010-11-03 18:05:31