检查是否有任何数组哈希对象需要值

时间:2013-06-23 19:45:06

标签: ruby

我有一个这样的数组:

arr = [{id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]

我需要检查arr个对象是否有名称Sam。什么是最优雅的方式?我只能想到用each骑车。

3 个答案:

答案 0 :(得分:10)

  

我需要检查是否有任何arr对象名称Sam

Enumerable#any?是一个很好的方式。

arr = [ {id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]
arr.any? {|h| h[:name] == "Sam"}
# => true

现在,如果您还想查看哪个Array对象中包含 Sam 值,您可以使用Enumerable#find

arr.find {|h| h[:name] == "Sam"}
# => {:id=>2, :name=>"Sam"}

答案 1 :(得分:2)

您还可以选择选择计数方法

<强> Enumberable#select

> arr = [{id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]
> arr.select { | h | h[:name] == 'Sam' }
# => [{:id=>2, :name=>"Sam"}] 

Enumberable#count

> arr.count { | h | h[:name] == 'Sam' }
# => 1

答案 2 :(得分:0)

您可以使用Enumberable#find_all返回与约束

匹配的所有对象
arr = [{:id=>1,:first_name=>'sam'},{:id=>2,:first_name=>'sam'},{:id=>3,:first_name=>'samanderson'},{:id=>4,:first_name=>'samuel'}]
arr.find_all{|obj| obj.first_name == 'sam'}
# => [{:id=>1,:first_name=>'sam'},{:id=>2,:first_name=>'sam'}]