Ruby 当嵌套迭代上的步骤正常跳过时,如何跳过父迭代步骤?
我有一些嵌套迭代器,如下所示:Ruby 当嵌套迭代上的步骤正常跳过时,如何跳过父迭代步骤?,ruby,loops,iterator,Ruby,Loops,Iterator,我有一些嵌套迭代器,如下所示: line_count = 1 if commit.body.lines.each do |line| unless @diff_line_nums.include? line_count puts line else filtered_diffs.each do |diff| diff.body.lines.each do |line| puts line end
line_count = 1
if commit.body.lines.each do |line|
unless @diff_line_nums.include? line_count
puts line
else
filtered_diffs.each do |diff|
diff.body.lines.each do |line|
puts line
end
end
end
line_count += 1
end
line_count = 1
shifted_line_count = 0
if commit.body.lines.each do |line|
unless @diff_line_nums.include? line_count
puts line + shifted_line_count
else
filtered_diffs.each do |diff|
diff.body.lines.each do |line|
shifted_line_count += 1
puts line
end
end
end
line_count += 1
end
简单来说,这就是我当前版本中的情况:
a line_count = 1
b line_count = 2
c - line_count = 3
1
2
3
d line_count = 4
e - line_count = 5
1
2
3
4
5
f line_count = 6
g line_count = 7
h line_count = 8
i line_count = 9
j line_count = 10
然而,我希望发生的是:
a line_count = 1
b line_count = 2
c - line_count = 3
1
2
3
4
h line_count = 8
i line_count = 9
j - line_count = 10
1
2
3
n line_count = 14
o line_count = 15
p line_count = 16
Aka…当它在外部块中迭代时,一旦进入内部迭代并成功处理每个项目,在内部块的每次成功迭代中,它也应该自动递增外部块。您可以使用第二个变量来保存额外的计数器。大概是这样的:
line_count = 1
if commit.body.lines.each do |line|
unless @diff_line_nums.include? line_count
puts line
else
filtered_diffs.each do |diff|
diff.body.lines.each do |line|
puts line
end
end
end
line_count += 1
end
line_count = 1
shifted_line_count = 0
if commit.body.lines.each do |line|
unless @diff_line_nums.include? line_count
puts line + shifted_line_count
else
filtered_diffs.each do |diff|
diff.body.lines.each do |line|
shifted_line_count += 1
puts line
end
end
end
line_count += 1
end
我想你已经到了,但是我的
行数所做的就是跟踪当前正在评估的行号。它实际上并没有修改实际正在计算的行。假设我们使用了这个新的计数器,那么一旦我们从嵌套的迭代器中出来,我将如何修改实际的迭代器(akacommit.body.lines.each
)以跳到shift\u line\u count
。如果这样做,为什么不在内部循环中直接增加它呢?那你就不需要第二个变量了。请记住,line\u count
实际上只是一个计数器,它实际上并不影响迭代中的本地对象。它只是跟踪它。我已经更新了问题,以显示我真正想做什么。换句话说,如果嵌套迭代在外部迭代位于c
时开始,并且嵌套集合有3个对象,那么当嵌套迭代在3个步骤之后完成时,外部迭代应该位于g
,而不是d
(这将是1个步骤,而不是4个步骤)。那么,如何修改外部迭代以跳过前面的N
位置。。。。