1

我有一个 Ruby 字符串数组:

array = ["dog eats", "dog", "cat eats dog"]

我想按字符串中的单词(或标记)的数量对这个数组进行排序,按降序排列,如下所示:(3 个单词,2 个单词,1 个单词):

sorted = ["cat eats dog", "dog eats", "dog"]

我怎样才能在 Ruby 中做到这一点?我可以想到一种蛮力方法,但想知道是否有类似 Ruby 的方法可以在 1 行甚至几行中执行此操作。

4

2 回答 2

8

数组类提供了一个sort_by方法。只需拆分刺痛并计算组件:

array.sort_by{|x| x.split.count}
于 2013-11-06T02:49:38.657 回答
0

您可以使用Array#sortand来执行此操作split,如下所示:

array = ["dog eats", "dog", "cat eats dog"]
 => ["dog eats", "dog", "cat eats dog"]
array.sort { |a,b| a.split.length <=> b.split.length }
 => ["dog", "dog eats", "cat eats dog"]

这按空格分隔的单词的升序排列。

编辑:根据@MarkReed,要反转,反转排序表达式的顺序:

array.sort { |a,b| b.split.length <=> a.split.length }
 => ["cat eats dog", "dog eats", "dog"]

如果需要,您可以split使用任何其他分隔符。

于 2013-11-06T02:50:24.387 回答