2012-06-09 95 views
0

我有这样红宝石多维数组排序

arr = [[24,4], [44,5],[67,1], [30, 2], [67, 2]] 

数组如果我使用arr.sort{|a,b| b[0]<=>a[0]}我得到这样的结果

[[67,1], [67, 2], [44,5], [30, 2], [24,4]] - #[value, id] 

如何重新排序的阵列来实现这一结果

[[67,2], [67, 1], [44,5], [30, 2], [24,4]] - #[value, id] 

如果有相同的值,那么排序应该发生在id降序上。

感谢

回答

3

这是更好地使用Enumerable#sort_by

arr = [[24,4], [44,5],[67,1], [30, 2], [67, 2]] 
arr.sort_by { |x, y| [-x, -y] } 
#=> [[67, 2], [67, 1], [44, 5], [30, 2], [24, 4]] 
+0

感谢tokland,有没有什么方法仅获取值结果来自arr的50以上? – Sri

+1

使用'select'。您应该检查Array和Enumerable的文档。 – tokland

+0

非常感谢..将通过文档 – Sri

4

为什么不采取简单明了的路线:

arr.sort.reverse 
# => [[67, 2], [67, 1], [44, 5], [30, 2], [24, 4]]