C#创建随机唯一整数列表

DP.*_*DP. 2 c# list unique distinct

我需要创建一个包含十亿个整数的列表,它们必须都是唯一的.我还需要非常快速地完成这项工作.

创建列表并逐个添加随机数并检查每个列表是否重复是非常慢的.

如果我只是用随机数填充列表而不检查它们是否重复,然后使用distinct().toList(),这似乎相当快.我重复这个,直到没有重复.但是,创建新列表所使用的额外内存不是最佳的.有没有办法获得distinct()的性能,但它只是修改源列表而不是创建一个新的列表?

Cod*_*ter 13

整数是否需要在一定范围内?如果是这样,您可以创建一个数组或列表,其中包含该范围内的所有数字(例如,从1到1000000000)并随机播放该列表.


Pie*_*rre 5

我在保持随机性的同时发现了最快的方法:

        Random rand = new Random();
        var ints = Enumerable.Range(0, numOfInts)
                                     .Select(i => new Tuple<int, int>(rand.Next(numOfInts), i))
                                     .OrderBy(i => i.Item1)
                                     .Select(i => i.Item2);
Run Code Online (Sandbox Code Playgroud)

...基本上为每个int分配一个随机ID,然后按该ID排序并选择生成的int列表。