Я пытаюсь выполнить итерацию по массиву с помощью a для каждого цикла в ruby, но внутри цикла я увеличиваю размер массива условно. Я хочу, чтобы перебирать массив, пока я не запускать итерацию с каждым элементом в массиве, включая все те, которые я добавилдля каждого цикла с увеличением массива
for x in fol
t = get_transition(x,"")
for i in t
if i != nil && !fol.include?(i)
fol = fol.push(i)
fol = fol.flatten
end
end
end
В первом цикле этого кода массив
fol = [1]
и это добавляет элемент 3 в массив, создающего
fol = [1, 3]
он будет затем запустить цикл снова с х = 3 и массив становится
fol = [1, 3, 2]
Но он не будет снова перебирать с х = 2. Заранее спасибо за любую помощь
В целях разъяснения я добавил в операторах печати и вывода, которые они производят.
fol.each do |x|
puts "fol = #{fol}"
puts "x = #{x}"
t = get_transition(x,"")
puts "t = #{t}"
t.each do |i|
puts "i = #{i}"
if i != nil && !fol.include?(i)
fol = fol.push(i)
fol = fol.flatten
end
end
end
puts "\nfol = #{fol}"
Этот код генерирует этот выход
fol = [1]
x = 1
t = [3]
i = 3
fol = [1, 3]
x = 3
t = [2]
i = 2
fol = [1, 3, 2]
Как это происходит от '[1,3]' до '[1,3,2]' когда 'x = 3'? Что вы имеете в виду, «он не будет повторять снова с x = 2»? Было бы полезно, если бы вы могли (отредактировать) дать пример для 'get_transition' и связанного с ним желаемого вывода. –
@CarySwoveland Я думаю, что 2 добавляется в 'x = 3' итерации' fol.push (i) '. Проблема в том, что он не продолжает итерацию 'x = 2'. – Max
Я должен добавить, что этот код очень запутан, особенно тот, в котором вы переназначаете 'fol' внутри цикла. Для полной переписки требуется полная идиоматичность, но я не могу сказать из контекста, что вы пытаетесь сделать. – Max