Если вы не очень обеспокоены скоростью, с которой будет рассчитываться блок, я бы посоветовал вам просто добавить эту строку в конец вашего блока, чтобы получить желаемый результат:
a.compact!
Это просто удалит все элементы nil
, которые вы ввели в массив ранее (потенциальные дубликаты), образуя желаемый результат: [1, 2, 3, 2, 3]
Если вам нужен другой алгоритм, вот что-то гораздо страшнее , чем у вас. : -)
require "pp"
a = [1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3]
i = 0
while i < a.size do
e = a[i]
j = i
begin
j += 1
end while e == a[j]
for k in i+1..j-1 do
a[k] = nil
end
i = j
end
pp a
a.compact!
pp a
Дает вам вывод:
[1, nil, nil, 2, nil, 3, nil, nil, nil, 2, nil, nil, 3, nil, nil]
[1, 2, 3, 2, 3]
На мой взгляд, ваш код в порядке. Просто добавьте a.compact!
вызов, и вы отсортированы.