我经常需要在循环中做一些操作,在迭代之间做一些其他操作。一个简单的例子是将数组中的单词收集成一个字符串,向后拼写并用逗号分隔。是否有任何语言的成语或语言支持?(现在我对 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.一个更实际的示例是创建一个 Haml 模板,其中 HTML 块是在循环中创建的,并且需要与其他 HTML 块连接。
更新 2.在programmers.stackexchange上,有人建议我的问题被称为“循环半”问题。
更新 3.我无法在 Haml 中应用 Map-Reduce 模式,因为 Haml 不允许关闭块end
(它只使用缩进),所以我找不到链接map
和reduce
. 所以从某种意义上说,这个问题仍然是开放的,但也许它也是封闭的,因为没有办法做到这一点。所以这是一个悬而未决的问题,我猜。