2011-08-15 103 views
1

对这个表进行排序的最简单的ruby代码是什么?因此在第一列 按升序排序,而在第二列按降序排序用一个以上的标准对二维数组排序

matrix = [ [1,1], 
      [2,1], 
      [2,4], 
      [2,3], 
      [2,2], 
      [3,1], 
      [4,2], 
      [4,3], 
      [4,4], 
      [1,4], 
      [1,3], 
      [1,2], 
      [3,2], 
      [3,4], 
      [3,3], 
      [4,1] ] 

结果表应该是:

[[1,4], 
[1,3], 
[1,2], 
[1,1], 
[2,4], 
[2,3], 
[2,2], 
[2,1], 
[3,4], 
[3,3], 
[3,2], 
[3,1], 
[4,4], 
[4,3], 
[4,2], 
[4,1] ] 

任何帮助表示赞赏, 特德

+0

[按数字排序对象集合(最高优先),然后按字母排序(按字母顺序排列)](http://stackoverflow.com/questions/2232470/sort-a-collection-of-objects-by-数字最高优先字母后缀) –

回答

4
matrix.sort_by {|e| [e[0], -e[1]]} 

我认为这是最简单的,但根据docs,当键集很简单时,它可能非常昂贵。

+4

展开块参数:matrix.sort_by {| x,y | [x,-y]} – tokland