Допустим, у меня есть массив, который содержит более трех повторений данной цифры.Я хочу удалить только три из этих повторений и оставить все оставшиеся экземпляры цифры в результирующем массиве.
Например:
a = [2, 2, 2, 1, 6]
b = a.map{|i|
num = a.select{|v| v == i}.size
num == 3 ? "" : i
}.reject{|v|
v == ""
}
дает мне желаемый результат:
b == [1, 6]
Однако в приведенном ниже примере я хочу, чтобы последние 2 остались в массиве.
# I want to reject ONLY triplets.
# In the below example, the last "2" should remain
a = [2, 2, 2, 1, 2]
b = a.map{|i|
num = a.select{|v| v == i}.size
num == 3 ? "" : i
}.reject{|v|
v == ""
}
Результат здесь:
b == [2, 2, 2, 1, 2]
Iхотелось бы, чтобы результат был:
b == [1, 2]
У меня также есть другой блок кода, аналогичный приведенному выше, с использованием немного другой логики, но в итоге получается тот же результат:
a = [2, 2, 2, 1, 2]
newdice = a.reject { |v|
if a.count(v) == 3
x = v
end
v == x
}
Я в растерянности, если не считать какой-то неприятной хитрости, которая включает в себя нахождение индекса первого экземпляра 3х повторяющейся цифры и вырезаем из него [index, 2].Должен быть более "рубиновый" способ.
Спасибо!