したがって、sCount はソース配列内の要素の数であり、iCount は削除する要素の数です。
let indices = Array.init iCount (fun _ -> rng.Next sCount) |> Seq.distinct |> Seq.toArray |> Array.sort
上記の方法の問題は、具体的に iCount インデックスを削除する必要があることであり、これはそれを保証するものではありません。
私は次のようなものを試しました
while indices.Count < iCount do
let x = rng.Next sCount
if not (indices.Contains x) then
indices <- indices.Add x
他にも似たようなものをいくつか...
私が試したすべての方法は非常に遅いですが、最大 2,000 万要素のサイズのソース配列を扱っています。