Ruby 对数组中的数组进行排序

13

我遇到了一个问题,无法弄清如何对一个数组中的另一个数组进行排序。这两个数组都很简单,我相信这很简单,但我似乎无法弄清楚。

这是数组:

[["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]

我想按照内部数组的整数值进行排序,该值表示单词出现的次数,数字越大越靠前。

4个回答

34

请尝试以下方法:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]
sorted = array.sort {|a,b| a[1] <=> b[1]}

或者:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]
sorted = array.sort {|a,b| b[1] <=> a[1]}

根据您想要升序还是降序。


2

sort可以与块一起使用。

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]
a.sort { |o1, o2| o1[1] <=> o2[1] }
#=> [["happy", 1], ["mad", 1], ["sad", 2], ["bad", 3], ["glad", 12]] 

5
针对键排序,你应该总是使用sort_by。不仅更容易阅读,而且更有效率。在这种情况下,你可以使用 a.sort_by {|el| el[1] },它与 a.sort_by(&:last) 相同。 - Jörg W Mittag
1
如果我们想要按降序排序,我们该如何使用a.sort_by { |el| el[1] }? - Vini.g.fer
@Vini.g.fer a.sort_by { |el| el[1] * -1} 如果el[1]是一个数字的话 - Abel

1
使用Array#sort方法:
ary = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]
ary.sort { |a, b| b[1] <=> a[1] }

1

这应该可以做到你想要的。

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]]
a.sort {|x,y| y[1] <=> x[1]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接