我有一個數組是這樣的:檢查是否有數組散列對象一直需要值
arr = [{id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]
我需要檢查,如果任何arr
對象都有名字Sam
。什麼是最優雅的方式?我只能想到與each
騎自行車。
我有一個數組是這樣的:檢查是否有數組散列對象一直需要值
arr = [{id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]
我需要檢查,如果任何arr
對象都有名字Sam
。什麼是最優雅的方式?我只能想到與each
騎自行車。
我需要檢查,如果任何改編的對象都有名字山姆
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"}
您也可以選擇選擇或計數方法
> arr = [{id: 1, name: 'John' }, {id: 2, name: 'Sam' }, {id: 3, name: 'Bob' }]
> arr.select { | h | h[:name] == 'Sam' }
# => [{:id=>2, :name=>"Sam"}]
> arr.count { | h | h[:name] == 'Sam' }
# => 1
您可以使用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'}]