2012-07-24 119 views
1

一個二維數組用於不同的結果,而無需重複我有一個二維數組:排序紅寶石

arr = [ 
    ["John", 17], 
    ["John", 17], 
    ["Abe", 14], 
    ["Kobian", 18], 
    ["Hony", 16], 
    ["Mony", 19], 
    ["John", 18], 
    ["Hari", 15], 
] 

我希望看到的唯一結果,所以,沒有相同的名稱重複按字母順序排序。 如果名字不同,年齡相同,則選擇一個不重複且年齡較小的名稱。

我做了很多,但沒有找到如何解決呢?在此先感謝您的答案......

+0

嘗試使用'Enumerable#group_by' – tokland 2012-07-24 08:11:16

回答

4
arr.group_by {|e| e[0] }.map {|k,v| v.min}.sort 

=> [["Abe", 14], ["Hari", 15], ["Hony", 16], ["John", 17], ["Kobian", 18], ["Mony", 19]] 

,並保持不同的年齡段:

require 'set' 
Set.new(arr).sort 

=> [["Abe", 14], ["Hari", 15], ["Hony", 16], ["John", 17], ["John", 18], ["Kobian", 18], ["Mony", 19]] 
+0

你也可以在group_by塊args中解開:'| key,value |' – tokland 2012-07-24 08:28:23

+0

Awsum ... kudos ... – 2012-07-28 22:34:47