在循环中替换字符的更好方法

时间:2014-10-20 05:40:00

标签: ruby loops alternating

我有一个循环,每次重复时都应该将变量dot的引用从句点更改为空格:

dot = (dot == ".") ? " " : "."

这样可以正常工作,但它对我来说不像适当的Ruby。看起来这应该是一行声明。我想知道是否有更多类似Ruby的方法来实现这一目标。我愿意以不同的方式在循环中实现这一目标;可能gsub可以做到。

3 个答案:

答案 0 :(得分:2)

dot = [' ', '.'].cycle
  #=> #<Enumerator: [" ", "."]:cycle>

dot.next #=> " "
dot.next #=> "."
dot.next #=> " "
dot.next #=> "."

答案 1 :(得分:1)

怎么样:

dot.gsub(/[\. ]/, '.' => ' ', ' ' => '.')

这意味着:

寻找.space并替换为space.

答案 2 :(得分:1)

如果你的循环是标准形式之一,你可以使用#with_index或其变体:

objects.each_with_index do |element, index|
   separator = index.even? ? "." : " "
   ... do something with element and separator
end

这使得意图明确,这通常胜过聪明的编码。