2015-03-02 72 views
0

我知道這可能會回答一百萬次,但我無法完全找到我想要做的事情。如何排序紅寶石中的二維數組

我有一個數組如下:

tag_array = [[tag1, tag_count1], [tag1, tag_count2], [tag3, tag_count3], [tag4, tag_count4]] 

,我想對它進行排序按字母順序根據標籤1,標籤2,標籤3 ...

我曾嘗試以下:

tag_array.sort {|a,b| a[0] <=> b[0]} 

但沒有運氣!

我在這裏錯過了什麼嗎?

謝謝!

PS:tag1,tag2,tag3 ...是字符串。

回答

5

Enumerable#sort_by就派上用場了:

tag_array.sort_by { |el| el.first } 

以上可以寫成簡短表示法(​​學分@賈斯汀 - 利卡塔):

tag_array.sort_by &:first 

BTW,sort_by被證明是更高效的那sort

+0

還是要速記這一點,'tag_array.sort_by(:第一)'。加我1。 – 2015-03-02 15:03:09

+0

@JustinLicata是的,謝謝,更新了答案。 – mudasobwa 2015-03-02 15:05:59

1

你可以使用tag_array.sort

您不必擔心將自己的塊,假設你只是在做一個陣列內[字符串,整數]數組對(你的)。按照元素的方式比較數組,爲您排序句柄(感謝mudasobwa爲此增加了清晰度)。

+1

_假設你正在做'Array's_實際。數組在元素明智的mnnner中進行比較,這就是爲什麼它可以工作。 – mudasobwa 2015-03-02 15:09:27

0

如果你說了

arr2 = arr.sort {|a,b| a[0] <=> b[0]} 

arr2 = arr.sort_by{|x,y|x} 

它工作得很好

0
2.2.0 :007 > tag_array = [['tag1', 3], ['tag2', 2], ['tag3', 23], ['tag4', 44]] 
=> [["tag1", 3], ["tag2", 2], ["tag3", 23], ["tag4", 44]] 
2.2.0 :008 > tag_array.sort_by{|tag| [tag[1], tag[0]]} 
=> [["tag2", 2], ["tag1", 3], ["tag3", 23], ["tag4", 44]] 
2.2.0 :009 > tag_array.sort_by{|tag| [tag[0], tag[1]]} 
=> [["tag1", 3], ["tag2", 2], ["tag3", 23], ["tag4", 44]]