我想找到一些优雅的方式来实现这一点。也许像下面这样: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