我知道这可能会被回答一百万次,但我无法找到我想做的事情。
我有一个如下数组:
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 ...是字符串。
答案 0 :(得分:5)
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]]