機械翻訳について

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

コレクション内の最小アイテムを確認するには、引数を指定しないでmin()関数をコールします。

ただし、特定の条件に基づいてコレクション内のアイテムのサブセットから最小値を見つける必要がある場合は、最小値を検索する式を識別するクローズをmin()に渡します。 たとえば、システムに対するアクセス数に基づいて、次のユーザー・リストで最小アイテムを検索するには、次の手順を実行します:

def users = [
             'smuench':[name:'Steve', badge:'A123', accesses: 135],
             'sburns':[name:'Steve', badge:'C789', accesses: 52],
             'qbronson':[name:'Quello', badge:'Z231', accesses: 52],
             'jevans':[name:'Joe', badge:'B456', accesses: 1001]
            ]
// Return the map entry with the minimum value based on accesses
def minUser = users.min { it.value.accesses }
min()関数は、最小accesses値が52の「最初の」アイテムを返します。これは、sburnsに対応するマップ・エントリです。 ただし、最小値を持つすべてのユーザーを返すには、まずアクセスの最小値を決定し、次にその値がaccessesプロパティのすべてのマップ・エントリを検索する必要があります。 このコードは次のようになります:
// Find the minimum value of the accesses property
def minAccesses = users.min { it.value.accesses }.value.accesses
// Return all map entries having that value for accesses
def usersWithMinAccesses = users.findAll{ it.value.accesses == minAccesses }

問題を解く方法はしばしば複数あります。 アクセスの最小数をコンピュートする別の方法は、最初にすべてのaccesses値をcollect()してから、その番号のコレクションでmin()をコールすることです。 その代替方法は次のようになります:

// Find the minimum value of the accesses property
def minAccesses = users.collect{ it.value.accesses }.min()
どちらかのアプローチを使用して最小アクセス値を見つけると、生成されるマップは次のようになります:
[
 sburns:[name:'Steve', badge:'C789', accesses:52],
 qbronson:[name:'Quello', badge:'Z231', accesses:52]
]

最小アイテムを検索するコレクションでカスタム比較を正しく実行する必要がある場合は、sort()関数がサポートする2パラメータ・コンパレータのクローズと同じ種類を渡すことができます。