機械翻訳について

コレクション内のアイテム数の計算

コレクション内のアイテム数を確認するには、そのsize()関数をコールします。 ただし、特定の条件に基づいてコレクション内のアイテムのサブセットをカウントする必要がある場合は、count()を使用します。

1つの値を指定すると、コレクション内のその値の出現回数が返されます。 たとえば、count('bbb')を次のように使用すると、2という番号が返されます。

def list = ['aa','bbb','cccc','defgh','bbb','aa','defgh','defgh']
// If there are two or more 'bbb' then do something...
if (list.count('bbb') >= 2){ /* etc. */ }
count()関数は、カウントするアイテムを識別するブール・クローズも受け入れます。 たとえば、長さが偶数の文字であるリスト内の文字列をカウントするには、次のようなコードを使用します。 カウントは、クローズがtrueと評価されるアイテムを反映します。
def list = ['aa','bbb','cccc','defgh','bbb','aa','defgh','defgh']
def numEvenLengths = list.count{ it.length() % 2 == 0 }
グループ化式によってコレクションを個別のグループにパーティション化し、各グループのアイテム数をカウントするには、countBy()関数を使用します。 各グループのアイテム数を計算する前に、グループ化キーを識別するクローズが使用されます。 たとえば、上のリスト内のアイテムの出現回数をカウントするには、次を使用します:
def entriesAndCounts = list.countBy{ it }
これにより、次のような結果マップが生成されます:
[aa:2, bbb:2, cccc:1, defgh:3]
リスト内の文字列の発生回数に基づいて結果を降順にソートする場合は、次を使用します:
def entriesAndCounts = list.countBy{ it }
                           .sort{ a, b -> b.value <=> a.value }
これによってマップが生成されます:
[defgh:3, aa:2, bbb:2, cccc:1]
最も頻繁に発生した単語とその出現回数を含むマップ・エントリのみを考慮する場合は、最初の要素を返す修飾されていないfind()関数をさらに連鎖できます。
def topWord = list.countBy{ it }
                  .sort{ a, b -> b.value <=> a.value }
                  .find()
println "Top word '${topWord.key}' appeared ${topWord.value} times"