「List::MoreUtils uniq/distinct」関数を使用して、配列内の重複する値を除外しようとしています。
ただし、特定の許容範囲内にある値、たとえば +-5 も重複としてカウントしたいと思います (許容範囲は「デルタ」とも呼ばれることがあると思います)。
たとえば、配列内の値が 588 で 589 の場合、差が 5 の許容範囲内にあるため、589 が起動します。
厄介な/コストのかかる配列のクロスチェックなしで、これを行うエレガントな方法はありますか?
編集:池上は私の質問にいくつかのあいまいさをもたらしました。私は問題に頭を悩ませています。しかし、私はそれがうまくいったと思います。
[500,505,510,515,525,900]
配列全体で値を一致させようとすると、次のようになります。
[500,510,525,900]
505 にヒットし、それを一意でないと見なし、配列から削除してから、505 がないために 510 を新たに一意であると見なします。これは、元の質問の概要を説明した方法だと思いますが、振り返ってみると、役に立たず、かなり恣意的なデータセットのようです。
私が本当に欲しいのは、次の試合です:
[500,900]
これは、互いに 5 以内の数値のグループを表し、900 の値の大きな分散も示しています。これは前者よりも有用な情報であると思われ、perreal の回答が私を近づけているようです。混乱を招いて申し訳ありません。池上氏と perreal 氏に、説明を強要していただいたことに感謝します。
EDIT 2 さらに良い一致は次のとおりです。
[510,900]
510、すべての連続した +-5 値の中央値です。
ただし、元の質問から大幅に逸脱していることを認識しているため、EDIT 1の説明に対する回答に満足しています。