2014-03-12 37 views
0
arr = [ 
    [0, "Moving Companies", 10], 
    [0, "ab-thera-sensa", 5], 
    [0, "belt-center", 16], 
    [0, "isabel", 3], 
    [0, "kreatio", 2], 
    [0, "service1", 7], 
    [0, "sorbion-sachet-multi-star", 6], 
    [0, "sss", 15], 
    [0, "telecom-service-industry", 14], 
    [1, " AbsoPad", 13], 
    [1, "telecom-service", 8], 
    [2, "cutisorb-ultra", 12], 
    [2, "sorbion-contact", 11], 
    [2, "sorbion-sachet-multi-star", 9] 
] 

假设这是我的数组,现在我想按照第一个元素的降序对它进行排序。我可以做一个arr.sort.reverse但现在的问题开始在Ruby on Rails中排序数组

我得到的数组:

[ 
    [2, "sorbion-sachet-multi-star", 9], 
    [2, "sorbion-contact", 11], 
    [2, "cutisorb-ultra", 12], 
    [1, "telecom-service", 8], 
    [1, " AbsoPad", 13], 
    [0, "telecom-service-industry", 14], 
    [0, "sss", 15], [0, "sorbion-sachet-multi-star", 6], 
    [0, "service1", 7], 
    [0, "kreatio", 2], 
    [0, "isabel", 3], 
    [0, "belt-center", 16], 
    [0, "ab-thera-sensa", 5], 
    [0, "Moving Companies", 10] 
] 

现在数组应该按升序排列的第二个元素的基础上进行排序。

这怎么能实现?

结果应该是这样的:

[ 
    [2, "cutisorb-ultra", 12], 
    [2, "sorbion-contact", 11], 
    [2, "sorbion-sachet-multi-star", 9], 
    [1,.......] 
] 

回答

2

自定义与块的排序。首先按第一个元素(0)进行降序排序。如果它们相同,则按第二个元素(1)升序排列:

arr.sort! do |a, b| 
    result = b[0] <=> a[0] 
    result = a[1] <=> b[1] if result == 0 
    result 
end 
+0

你是正确的+1。这个编辑对我来说很重要,因为OP在寻找什么。 –

+0

谢谢,你能解释一下你在那里做了什么。 – aelor

0

这样怎么样?

arr.sort { |i,j| [j[0],j[2]] <=> [i[0],i[2]] } 

输出:

=> [[2, "cutisorb-ultra", 12], 
[2, "sorbion-contact", 11], 
[2, "sorbion-sachet-multi-star", 9], 
[1, " AbsoPad", 13], 
[1, "telecom-service", 8], 
[0, "belt-center", 16], 
[0, "sss", 15], 
[0, "telecom-service-industry", 14], 
[0, "Moving Companies", 10], 
[0, "service1", 7], 
[0, "sorbion-sachet-multi-star", 6], 
[0, "ab-thera-sensa", 5], 
[0, "isabel", 3], 
[0, "kreatio", 2]] 
+0

谁告诉坏.. meee ??? +1 :-) –

-1

请尝试:

arr.sort_by{|x|[-x[0],-x[2]]} 
+0

你能解释它为什么以及它是如何工作的吗? – Pietu1998

+0

你能解释一下吗? – aelor