特定の数字の 3 回以上の繰り返しを含む配列があるとします。これらの繰り返しのうち 3 つだけを削除し、残りの数字のインスタンスを結果の配列に残します。
例えば:
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] を切り出すことを含む厄介なトリックを除いて、私は途方に暮れています。もっと「ルビーに似た」方法が必要です。
ありがとう!