我有一个 Ruby 字符串数组:
array = ["dog eats", "dog", "cat eats dog"]
我想按字符串中的单词(或标记)的数量对这个数组进行排序,按降序排列,如下所示:(3 个单词,2 个单词,1 个单词):
sorted = ["cat eats dog", "dog eats", "dog"]
我怎样才能在 Ruby 中做到这一点?我可以想到一种蛮力方法,但想知道是否有类似 Ruby 的方法可以在 1 行甚至几行中执行此操作。
我有一个 Ruby 字符串数组:
array = ["dog eats", "dog", "cat eats dog"]
我想按字符串中的单词(或标记)的数量对这个数组进行排序,按降序排列,如下所示:(3 个单词,2 个单词,1 个单词):
sorted = ["cat eats dog", "dog eats", "dog"]
我怎样才能在 Ruby 中做到这一点?我可以想到一种蛮力方法,但想知道是否有类似 Ruby 的方法可以在 1 行甚至几行中执行此操作。
数组类提供了一个sort_by
方法。只需拆分刺痛并计算组件:
array.sort_by{|x| x.split.count}
您可以使用Array#sort
and来执行此操作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
使用任何其他分隔符。