Ruby on rails 检查散列中的值
我正在从事一个使用Ruby 1.8的遗留Rails项目 我有一个键值的散列,其中value是一个浮点数 例如,Ruby on rails 检查散列中的值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在从事一个使用Ruby 1.8的遗留Rails项目 我有一个键值的散列,其中value是一个浮点数 例如,my_hash=['foo'=>12.20,'bar'=>10.0]。如何检查my_hash是否包含所有零值?e、 g.['foo'=>0,'bar'=>0,'whatever'=>0]或['foo'=>0.0,'bar'=>0,'whatever'=>0.0] 我知道我可以逐个循环检查元素,但我只是想知道有没有更优雅的方法?如果我的\u散列是: [{“foo”=>0.0,“bar”=>
my_hash=['foo'=>12.20,'bar'=>10.0]
。如何检查my_hash
是否包含所有零值?e、 g.['foo'=>0,'bar'=>0,'whatever'=>0]
或['foo'=>0.0,'bar'=>0,'whatever'=>0.0]
我知道我可以逐个循环检查元素,但我只是想知道有没有更优雅的方法?如果我的\u散列是:
[{“foo”=>0.0,“bar”=>0,“随便”=>0.0}]
my_hash.first.values.all?{|item| item.zero?}
或者,如果我的_散列是数组,则只需:
my_hash.all?{|item| item.zero?}
检查哈希中的所有值是否为零
2.2.3 :006 > h={"foo"=>0.0, "bar"=>0, "whatever"=>0.0}
=> {"foo"=>0.0, "bar"=>0, "whatever"=>0.0}
2.2.3 :007 > h.values.all?{|a| a.zero?}
=> true
如果它是一个散列数组,那么
2.2.3 :001 > h = ['foo'=>0.0, 'bar'=>0, 'whatever'=>0.0]
=> [{"foo"=>0.0, "bar"=>0, "whatever"=>0.0}]
2.2.3 :004 > h[0].values.all?{|a| a.zero? }
=> true
或
任何元素都是零
2.2.3 :009 > h={"foo"=>0.0, "bar"=>2, "whatever"=>1.1}
=> {"foo"=>0.0, "bar"=>2, "whatever"=>1.1}
2.2.3 :010 > h.values.any?{|a| a.zero?}
=> true
2.2.3 :011 > h={"foo"=>0.2, "bar"=>2, "whatever"=>1.1}
=> {"foo"=>0.2, "bar"=>2, "whatever"=>1.1}
2.2.3 :012 > h.values.any?{|a| a.zero?}
=> false
my_hash.values
提供一个数组;然后,根据您前面的问题:my_hash.values.all?(&:zero?)
。或者,my_hash.all?{| k,v | v.zero?}
.Amadan会来给你同样的答案.values
在我的hash
哈哈,不错。非常接近。。。10秒['foo'=>12.20,'bar'=>10.0]
创建一个包含散列的数组。它相当于[{'foo'=>12.20,'bar'=>10.0}]
而您可能想要{'foo'=>12.20,'bar'=>10.0}
为什么首先调用
?我想您的my_散列变量是:[{'foo'=>0.0,“bar'=>0”,随便什么“=>0.0}
2.2.3 :009 > h={"foo"=>0.0, "bar"=>2, "whatever"=>1.1}
=> {"foo"=>0.0, "bar"=>2, "whatever"=>1.1}
2.2.3 :010 > h.values.any?{|a| a.zero?}
=> true
2.2.3 :011 > h={"foo"=>0.2, "bar"=>2, "whatever"=>1.1}
=> {"foo"=>0.2, "bar"=>2, "whatever"=>1.1}
2.2.3 :012 > h.values.any?{|a| a.zero?}
=> false