在Ruby中按数组中对象的值排序

时间:2011-04-19 00:50:47

标签: ruby arrays sorting

我在数组中有一堆对象,并希望按每个对象的值排序。每个对象中有问题的属性都是数值。

例如:

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],]

会变成:

[[1, ..bunch of other stuff],[3, ""],[5, ""],[12, ""],]

我想按存储在每个对象中的数值进行排序。

[5, 3, 4, 1, 2]变为[1, 2, 3, 4, 5],但这些数字存储在对象中。

4 个答案:

答案 0 :(得分:9)

其他答案很好但不是最小的。怎么样?

lst.sort_by &:first

答案 1 :(得分:3)

sort方法可以在比较元素时使用块:

lst = [[1, 'foo'], [4, 'bar'], [2, 'qux']]
=> [[1, "foo"], [4, "bar"], [2, "qux"]]
srtd = lst.sort {|x,y| x[0] <=> y[0] }
=> [[1, "foo"], [2, "qux"], [4, "fbar"]]

答案 2 :(得分:1)

假设您只想根据第一个元素进行排序,

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],].
sort_by{|n, *args| n}

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],].
sort_by{|n, args| n}

答案 3 :(得分:1)

使用sort_by对对象和复杂结构进行排序时。 Sort_by执行“Schwartzian Transform”,这可以对排序速度产生重大影响。

由于您没有提供足够的信息可供使用,我建议您阅读上面链接的文档。你会发现它很容易实现,并且可以产生很大的不同。