【发布时间】:2011-11-02 14:12:59
【问题描述】:
我需要创建一个包含十亿个整数的列表,并且它们都必须是唯一的。我还需要非常快地完成这项工作。
创建一个列表并一个一个地添加随机数并检查每个是否重复非常慢。
如果我只是用随机数填充一个列表而不检查它们是否重复然后使用 distinct().toList(),这似乎相当快。我重复这个直到没有更多的重复。但是,创建新列表所使用的额外内存并不是最优的。有没有办法获得 distinct() 的性能,但不是创建一个新列表,而是修改源列表?
【问题讨论】:
-
您要创建整数的范围有多大?
-
这是以前要求的 C 语言。投票率最高的答案(与接受的答案相反)有一些可以移植到 C# 的建议。 stackoverflow.com/questions/1608181/…
-
您将这些整数存储在什么数据类型中?无论如何,一个 32 位整数只能容纳 21 亿(2,147,483,647),因此您真正的“随机”程度是有限度的。
-
@Darin 他们是否在 .net 4 中添加了该功能?在 .net 2 中,2GB 限制甚至适用于 64 位应用程序。 blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx
-
您没有在问题中包含几乎足够的信息来提供解决方案。例如,您是否要求列表按随机顺序排列,还是仅包含随机整数? (“选六”式彩票随机选择六个不同的整数;顺序无关紧要。但是从列表中随机选择六首歌曲并播放它们时,顺序也应该是随机的。)整数的范围是多少?他们可以是消极的吗?它们可以比 Int32 中的更大吗?一个 Int64?