Как заменить в руби два цикла на один?
a = [0,1,4,8,0,10,30,50,0]
b = []
zero_indexes = []
a.each_with_index do |e,i|
zero_indexes << i if e == 0
end
b = a.select.with_index do |e,i|
i > zero_indexes[0] && i < zero_indexes[1]
end
p b.sum
Ответы (2 шт):
Автор решения: Nakilon
→ Ссылка
Так будет один проход, а не два.
a = [0,1,4,8,0,10,30,50,0]
b = a.drop_while{ |e| e != 0 }.
drop(1).
take_while{ |e| e != 0 }
p b.sum
Автор решения: MarianD
→ Ссылка
Вы можете в одном и том же цикле одновременно
- и обнаружить, какое количество нулей вы уже встретили,
- и на основании того добавить ненулевые элементы между первым и вторым нулем:
a = [0,1,4,8,0,10,30,50,0]
b = []
zero_count = 0
a.each do |e|
if e == 0
zero_count += 1
elsif zero_count == 1
b << e
end
end
p b
p b.sum
Вывод:
[1, 4, 8] 13