假设我有一个数组,其中包含三个以上给定数字的重复。我只想删除其中三个重复,并将数字的任何剩余实例留在结果数组中。
例如:
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]
我希望结果是:
b == [1, 2]
我还有另一个代码块,类似于上面的代码块,使用有点不同的逻辑,但最终得到相同的结果:
a = [2, 2, 2, 1, 2]
newdice = a.reject { |v|
if a.count(v) == 3
x = v
end
v == x
}
我不知所措,除了一些令人讨厌的诡计,包括找到 3x 重复数字的第一个实例的索引,并从中切出 [index, 2] 。必须有一种更“类似红宝石”的方式。
谢谢!