たとえば、マップが次の値に等しい場合:
z = ['x':1, 'y':2]
f(2)の場合、次のようになります。
[x':2, 'y':4]
.eachループを使用して実行できることはわかっています。問題は、もっと簡単な方法があるかどうかです。
ありがとうございました
たとえば、マップが次の値に等しい場合:
z = ['x':1, 'y':2]
f(2)の場合、次のようになります。
[x':2, 'y':4]
.eachループを使用して実行できることはわかっています。問題は、もっと簡単な方法があるかどうかです。
ありがとうございました
のcollectEntries
すべてのキーと値に適用され、更新された値で新しいMap
値を返す関数があります。 Map
def z = [x:1, y:2]
z = z.collectEntries{ key, value -> [(key): value*2] }
assert z == [x:2, y:4]
ここにいくつかのメモ:
['z':1]
はと同じです[z:1]
が、後者の方がよりグルーヴィーで読みやすくなっています。collectEntries
マップでなければならないので、そこで注意してください(key)
、だけでなく、を使用する必要があります。key
each()
ただし、次のように、単一引数のクロージャーで使用する方がほぼ確実にクリーンです。
def z = [x:1, y:2]
z.each{ it.value = it.value*2 }
assert z == [x:2, y:4]
この方法では、落とし穴が少なくなり、マップがインプレースで変更されるため、変数を再割り当てする必要がありません。