我在数组中有一堆对象,并希望按每个对象的值排序。每个对象中有问题的属性都是数值。
例如:
[[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]
,但这些数字存储在对象中。
答案 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”,这可以对排序速度产生重大影响。
由于您没有提供足够的信息可供使用,我建议您阅读上面链接的文档。你会发现它很容易实现,并且可以产生很大的不同。