是否有一种Ruby方法可以按字数对字符串数组进行排序?

是否有一种Ruby方法可以按字数对字符串数组进行排序?,ruby,Ruby,我有一个Ruby字符串数组: array = ["dog eats", "dog", "cat eats dog"] 我想按照字符串中的字数(或标记)对这个数组进行排序,按降序排列,如下所示:(3个字,2个字,1个字): 我怎么用Ruby做这个?我可以想到一种蛮力方法,但我想知道是否有一种类似Ruby的方法可以在一行或几行中实现这一点。数组类提供了一种排序方法。只需拆分尾钉并计算组件: array.sort_by{|x| x.split.count} array类提供了一个sort\u by

我有一个Ruby字符串数组:

array = ["dog eats", "dog", "cat eats dog"]
我想按照字符串中的字数(或标记)对这个数组进行排序,按降序排列,如下所示:(3个字,2个字,1个字):


我怎么用Ruby做这个?我可以想到一种蛮力方法,但我想知道是否有一种类似Ruby的方法可以在一行或几行中实现这一点。

数组类提供了一种
排序方法。只需拆分尾钉并计算组件:

array.sort_by{|x| x.split.count}

array类提供了一个
sort\u by
方法。只需拆分尾钉并计算组件:

array.sort_by{|x| x.split.count}

您可以使用
Array#sort
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"]
array=[“狗吃”、“狗吃”、“猫吃狗”]
=>[“狗吃”、“狗”、“猫吃狗”]
array.sort{| a,b | a.split.length b.split.length}
=>[“狗”,“狗吃”,“猫吃狗”]
按空格分隔的单词数量递增排序

编辑:按照@MarkReed,要反转,请反转排序表达式的顺序:

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

如果需要,您可以在任何其他分隔符上拆分

您可以使用
数组#排序
拆分
,如下所示:

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"]
array=[“狗吃”、“狗吃”、“猫吃狗”]
=>[“狗吃”、“狗”、“猫吃狗”]
array.sort{| a,b | a.split.length b.split.length}
=>[“狗”,“狗吃”,“猫吃狗”]
按空格分隔的单词数量递增排序

编辑:按照@MarkReed,要反转,请反转排序表达式的顺序:

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

如果需要,您可以在任何其他分隔符上拆分。

因为OP需要降序,所以您应该在
x.split.count
前面加一个减号。或者对结果调用
reverse
。因为OP需要降序,你应该在
x.split.count
前面加一个减号,或者对结果调用
reverse
。我没有否决u。我实际上是在使用你的答案,并将其标记为正确:)谢谢。不过,我不得不说@michas在这种情况下有一个更优雅的解决方案。加入
.reverse
,它会做同样的事情,只是更简洁。
sort
会比
sort\u by
慢。对于每个比较
排序
都需要对字符串进行两次拆分,并在第一次看到元素时计算长度,每个元素一次
sort_by
将记住计算结果,并且每个元素只执行一次。任何时候,对两个不是简单对象的元素进行比较时,你应该考虑使用<代码> SottyBi。如果你要用一个显式块使用<代码>排序< /代码>,你应该利用它,在比较中只交换<代码> A <代码> >代码> b>代码>。而不是对整件事的结果调用
。反转
。好主意,@MarkReed。更新了答案,我没有投你反对票。我实际上是在使用你的答案,并将其标记为正确:)谢谢。不过,我不得不说@michas在这种情况下有一个更优雅的解决方案。加入
.reverse
,它会做同样的事情,只是更简洁。
sort
会比
sort\u by
慢。对于每个比较
排序
都需要对字符串进行两次拆分,并在第一次看到元素时计算长度,每个元素一次
sort_by
将记住计算结果,并且每个元素只执行一次。任何时候,对两个不是简单对象的元素进行比较时,你应该考虑使用<代码> SottyBi。如果你要用一个显式块使用<代码>排序< /代码>,你应该利用它,在比较中只交换<代码> A <代码> >代码> b>代码>。而不是对整件事的结果调用
。反转
。好主意,@MarkReed。更新了答案。当你询问代码时,你需要显示你在哪里搜索过,以及为什么没有帮助。你说“我能想出一种暴力手段”,但不要告诉我们你尝试过什么。将来,请展示你的尝试。记住,你是在请求我们帮助你,所以要表明你也在帮助你自己。当你请求代码时,你需要表明你在哪里搜索过,以及为什么没有帮助。你说“我能想出一种暴力手段”,但不要告诉我们你尝试过什么。将来,请展示你的尝试。记住,你是在请求我们帮助你,所以要表明你也在帮助自己。