如何在ruby中对二维数组进行排序

时间:2015-03-02 14:56:59

标签: ruby-on-rails ruby arrays sorting

我知道这可能会被回答一百万次,但我无法找到我想做的事情。

我有一个如下数组:

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

我想根据tag1,tag2,tag3 ......

按字母顺序排序

我尝试了以下内容:

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

但没有运气!

我在这里错过了什么吗?

谢谢!

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

4 个答案:

答案 0 :(得分:5)

Enumerable#sort_by来救援:

tag_array.sort_by { |el| el.first }

以上可能用简短的符号写成(@ justin-licata的信用):

tag_array.sort_by &:first

BTW,sort_by被证明比sort更有效率。

答案 1 :(得分:1)

您可以使用tag_array.sort

您不必担心添加自己的块,假设您只是在一个数组(您是)中执行[String,Integer]数组对。为数组进行排序的句柄以元素方式进行比较(感谢mudasobwa为此增加了清晰度)。

答案 2 :(得分:0)

如果你说

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

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

它运作得很好

答案 3 :(得分: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]]