按照内部元素的数量对2D数组进行排序

如何按内部元素的长度对2D数组进行排序? 内部元素的数量不一样。

例:

a = [[1], [2, 3], [4, 5, 6, 7], [8, 9]] 

排序后,数组将变为:

 #=> [[4, 5, 6, 7], [2, 3], [8, 9], [1]] 

该解决方案有效:

 a = [[1], [2, 3], [4, 5, 6, 7], [8, 9]] a.sort_by! { |array| -array.length } #=> [[4, 5, 6, 7], [8, 9], [2, 3], [1]] 

我使用sort_by方法并按长度从最大到最小排序。

这个解决方案更具可读性并且工作正常,但速度有点慢:

 a = [[1], [2, 3], [4, 5, 6, 7], [8, 9]] a.sort_by(&:length).reverse! #=> [[4, 5, 6, 7], [8, 9], [2, 3], [1]] 

我正在使用sort_by方法使用length,它将数组从最小到最大按长度排序。 然后我reverse!使用reverse! 方法它从最大到最小的顺序。

试试这个:

 a = [[1], [2, 3], [4, 5, 6, 7], [8, 9]] a.sort { |x, y| y.size <=> x.size } #=> [[4, 5, 6, 7], [2, 3], [8, 9], [1]]