Ruby - 循环 IF x 次并更改条件

标签 ruby

我想在 if 语句上循环 20 次,但每次运行时,有些事情必须改变。

例子:

    input = [0,0,0,44,754,22,0,632,2,22,0,2,nil,2,24,nil,666,90909,2,4,6,7,2,7,3,2,2,7,1,8,6,3,2,19,5,46]

Statement = "Statement THIS"

if
input[1] != nil &&
    input[2] == 0
  Statement.sub! "THIS", "WHERE #{input[8]} #{input[9]} THIS"
else
end

puts Statement #Statement WHERE 2 22 THIS

if
input[5] != nil &&
    input[6] == 0
  Statement.sub! "THIS", "AND #{input[12]} #{input[13]} THIS"
else
end

puts Statement #Statement WHERE 2 22 AND  2 THIS

if
input[9] != nil &&
    input[10] == 0
  Statement.sub! "THIS", "AND #{input[16]} #{input[17]} THIS"
else
end

puts Statement #Statement WHERE 2 22 AND  2 AND 666 90909 THIS

在第二个 IF 语句中,以下内容发生了变化:

  1. 每个key增加了4(1,2,8,9变成了5,6,12,13)
  2. WHERE 变成了 AND

我希望此行为再重复 18 次,因此第三个 IF 语句具有:

  1. 每个键都增加了 4(5、6、12、13 变成了 9、10、16、17)
  2. HELLO 一词已更改为 GOODBYE(但是此规则现在是多余的,因为第二个 IF 语句已解决)。

最佳答案

input = [
  0,0,0,44,754,22,0,632,2,22,0,2,
  nil,2,24,nil,666,90909,2,4,6,7,
  2,7,3,2,2,7,1,8,6,3,2,19,5,46
]

(1..Float::INFINITY).step(4) do |i|
  i = i.to_i # is float here
  break Statement if i >= input.size
  next if input[i].nil? || !input[i+1].zero?

  keyword = Statement =~ /WHERE/ ? 'AND' : 'WHERE'
  Statement.sub! "THIS", "#{keyword} #{input[i+7]} #{input[i+8]} THIS"
end
#⇒ "Statement WHERE 2 22 AND  2 AND 666 90909 THIS"

关于Ruby - 循环 IF x 次并更改条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144713/

相关文章:

Ruby 在初始化时将自己作为实例传递

ruby-on-rails - 如何将字符串评估/常量化为方法,然后将参数传递给它

ruby - 将 block 放在一行上的语法

ruby - 如何创建退出消息

ruby - redis batsd (statsd) 计数器

ruby - 返回声明

ruby - 从外部方法在 ruby​​ 循环上调用 next

ruby-on-rails - 获取 Rails 中相关模型的列表

ruby-on-rails - 为什么我的副本也会影响原件?

ruby-on-rails - GPGME Passphrase 提示问题(Ruby)