2013-06-23 121 views
1

我有一個數組是這樣的:檢查是否有數組散列對象一直需要值

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

我需要檢查,如果任何arr對象都有名字Sam。什麼是最優雅的方式?我只能想到與each騎自行車。

回答

10

我需要檢查,如果任何改編的對象都有名字山姆

Enumerable#any?是一個很好的路要走。

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

現在,如果你也想看看哪個Array對象具有價值山姆在裏面,你可以使用Enumerable#find爲同:

arr.find {|h| h[:name] == "Sam"} 
# => {:id=>2, :name=>"Sam"} 
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 
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'}] 
相關問題