所以 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
还有一些其他类似的事情......
不过,我尝试过的每一种方式都非常缓慢——我正在处理大小高达 2000 万个元素的源数组。