1

文字列の Ruby 配列があります。

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

この配列を、文字列内の単語 (またはトークン) の数で降順​​に並べ替えたい (3 単語、2 単語、1 単語):

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

Rubyでこれを行うにはどうすればよいですか? 力ずくの方法を考えることはできますが、これを 1 行または数行で行う Ruby のような方法があるかどうか疑問に思っていました。

4

2 に答える 2

8

配列クラスはsort_byメソッドを提供します。文字列を分割してコンポーネントを数えるだけです。

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

次のように、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"]

これは、空白で区切られた単語の昇順でソートされます。

編集: @MarkReed ごとに、並べ替え式の順序を逆にするには:

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

split必要に応じて、他のセパレーターを使用できます。

于 2013-11-06T02:50:24.387 に答える