Ruby-如果x次循环并改变条件
我想在if语句上循环20次,但每次它运行时,有些事情必须改变 例如:Ruby-如果x次循环并改变条件,ruby,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", "WHER
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语句中,以下内容发生了变化:
要循环20次,可以使用times方法
arr\u索引=1
20.5倍
如果arr_指数<1
operator=“WHERE”
其他的
运算符=“和”
结束
如果输入[arr_index]!=零和输入[arr_索引+1]==0
声明.sub!“THIS”,“#{operator}#{input[arr_index+7]}#{input[arr_index+8]}THIS”
结束
arr_指数+=4
结束
另一个选项是更改输入数组的内容或创建另一个数据结构(例如,哈希、数组、哈希数组、数组哈希),并使用循环所需的精确值。因此,无需在每次迭代时将索引增加4
此外,除非STAMENT是一个类或常量,否则约定其名称应为小写(例如,语句)
祝你好运 n=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
]
(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"
语句,其中%s然后“%(1..1+4*(n-1))。步骤(4)。带_对象([]){i,a|
“其中22和2以及666 90909的声明”
那么问题出在哪里呢?你不能制作if elsif
?我可以,但我有30多个if语句,每个都需要这种行为(20个循环)。结果会非常长,我想知道这种行为是否可能出现某种循环。似乎我不明白。初始数据是什么?抱歉,我已经更新了问题代码。它按照我的需要工作,但我想在每个if中再执行18次,更改键号。我可以再编写18次代码,或者ps有一个更快的方法吗?完美而漂亮的解决方案,用中断代替20x循环,非常有用。谢谢,它也派上了用场。
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"
n = 20
"STATEMENT WHERE %s THEN" % (1..1+4*(n-1)).step(4).with_object([]) { |i,a|
a << "#{ input[i+7] } #{ input[i+8] }" unless input[i].nil? || input[i+1] != 0 }.
join(" AND ")
#=> "Statement WHERE 2 22 AND 2 AND 666 90909 THEN"