1

我有一个这样的数组:

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

我需要检查是否有任何arr对象具有 name Sam。什么是最优雅的方式?我只能想到骑自行车each

4

3 回答 3

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"}
于 2013-06-23T19:46:47.660 回答
2

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

可编号#select

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

可编号#count

> arr.count { | h | h[:name] == 'Sam' }
# => 1
于 2013-06-24T04:14:17.177 回答
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'}]
于 2015-10-14T11:32:28.763 回答