2013-05-03 102 views
0

我有一個ArrayHash es具有相同的鍵值,用於存儲人員的數據。刪除具有相同鍵值的哈希值

我想刪除具有相同值的密鑰:name:surname的哈希值。其餘的值可能不同,因此在數組上調用uniq!將不起作用。

有沒有簡單的解決方案呢?

回答

4

你可以傳遞到uniquniq!塊,由塊返回的值是用來比較兩個條目平等:

irb> people = [{name: 'foo', surname: 'bar', age: 10}, 
       {name: 'foo', surname: 'bar' age: 11}] 
irb> people.uniq { |p| [p[:name], p[:surname]] } 
=> [{:name=>"foo", :surname=>"bar", :age=>10}] 
0
unique_people = {} 
person_array.each do |person| 
    unique_people["#{person[:name]} #{person[:surname]}"] = person 
end 

array_of_unique_people = unique_people.values 

這應該做的伎倆。

1
arr=[{name: 'john', surname: 'smith', phone:123456789}, 
    {name: 'thomas', surname: 'hardy', phone: 671234992}, 
    {name: 'john', surname: 'smith', phone: 666777888}] 
# [{:name=>"john", :surname=>"smith", :phone=>123456789}, 
# {:name=>"thomas", :surname=>"hardy", :phone=>671234992}, 
# {:name=>"john", :surname=>"smith", :phone=>666777888}] 

arr.uniq {|h| [h[:name], h[:surname]]} 
# [{:name=>"john", :surname=>"smith", :phone=>123456789}, 
# {:name=>"thomas", :surname=>"hardy", :phone=>671234992}] 
+0

我認爲只會獨特的姓氏。你想在塊內使用'+',而不是'&&'。事實上,你可能想要構建一個數組進行比較。 – 2013-05-03 08:57:51

+0

@NeilSlater正確 – 2013-05-03 08:59:22

+0

卡羅爾亞當斯和卡羅拉水壩不高興。 – steenslag 2013-05-03 14:07:24

0
a.delete_if do |h| 
    a.select{|i| i[:name] == h[:name] and i[:surname] == h[:surname] }.count > 1 
end