多くの場合、ループ内でいくつかの操作を実行し、反復の間に他の操作を実行する必要があります。簡単な例は、単語を配列から文字列に収集し、逆向きに綴り、コンマで区切ることです。これに対するイディオムまたは言語サポートはどの言語でもありますか? (今のところ、私は主に Ruby に興味があります。)
私は通常、次のようなことをします
a = ['foo', 'bar', 'baz']
s = ''
n = a.size - 1
i = 0
loop do
s << a[i].reverse
break if i == n
s << ', '
i += 1
end
しかし、Ruby イテレーターを使用する場合、この半分のイテレーションを保存する良い方法がわかりません。
これは冗長に見えます:
a = ['foo', 'bar', 'baz']
s = ''
a.each do |w|
s << w.reverse
s << ', ' unless w == a.last
end
更新 1.より実用的な例は、HTML のブロックがループで作成され、HTML の他のブロックと連結する必要がある Haml テンプレートの作成です。
更新 2。programmers.stackexchangeで、私の問題は「ループと半分」の問題と呼ばれることが示唆されました。
更新 3.end
Haml では(インデントを使用するだけで) でブロックを閉じることができないため、Haml で Map-Reduce パターンを適用できませんでしmap
たreduce
。したがって、ある意味では、この質問はまだ未解決ですが、これを行う方法がないため、クローズされている可能性もあります。だから、これはおかしな質問だと思います。