2015-10-10 49 views
1

如何根据其内部元素的长度排列二维数组?内部元素的数量并不相同。通过在内部元素的数量排序二维数组

实施例:

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

在排序之后,该阵列将变为:

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

你能解释一下你试过吗?如果你证明至少你付出了一些努力来解决问题,那将是很好的。 –

+0

Erm,Simone,我尝试过。 –

+0

我发布的声明是 followers = followers.sort_by {| x |追随者[0..followers.length-1] .length} 追随者是我的数组,我试过这个,但它似乎并没有按照我想要的顺序排序 –

回答

3

此解决方案的工作原理:

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方法,使用长度,这将从最小到最大长度由数组进行排序。然后我用它从最大到最小的顺序使用reverse!方法。

+0

在我想保留索引的情况下所以我创建了一个基于数组索引的散列,然后我想根据前面提到的长度大小对散列进行排序,这个语句是否可以再次使用它? –

+0

@ ZhenLiangLow我相信这是你正在寻找的东西:http://stackoverflow.com/questions/10957012/sort-hash-by-length-of-contained-values –

2

试试这个:

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]] 
+0

啊,我意识到我为什么认为这是错的!排序是正确的 –

+0

在我想保留数组索引的情况下,所以我创建了一个基于数组索引的散列,然后我想根据长度大小对散列进行排序前面已经提到过,这个声明是否与它一起工作? –