Python の enumerateに類似した、pairs を返すメソッドeach
を定義する以外のメソッドでコレクションのインデックスを使用する場合の別のアプローチ:enumerate
[index, element]
Iterable.metaClass.enumerate = { start = 0 ->
def index = start
delegate.collect { [index++, it] }
}
たとえば、次のようになります。
assert 'un dos tres'.tokenize().enumerate() == [[0,'un'], [1,'dos'], [2,'tres']]
(前者は Iterable を返し、後者は a を返すため、tokenize
代わりに使用していることに注意してください)split
String[]
この新しいコレクションをeach
、必要に応じて で使用できます。
'one two three'.tokenize().enumerate().each { index, word ->
println "$index: $word"
}
または、他の反復方法で使用することもできます:D
def repetitions = 'one two three'.tokenize().enumerate(1).collect { n, word ->
([word] * n).join(' ')
}
assert repetitions == ['one', 'two two', 'three three three']
注enumerate
: tim_yates のより機能的なアプローチに従う、メソッドを定義する別の方法は次のとおりです。
Iterable.metaClass.enumerate = { start = 0 ->
def end = start + delegate.size() - 1
[start..end, delegate].transpose()
}