【发布时间】:2013-07-20 15:17:07
【问题描述】:
我找到了这篇文章:
Efficiently selecting a set of random elements from a linked list
但这意味着,为了接近样本中的真正随机性,我必须遍历所有元素,将它们与随机数一起放入内存中,然后进行排序。我这里有大量的项目(数百万) - 有没有更有效的方法来解决这个问题?
【问题讨论】:
-
使用 c# 列表不同于使用链接中描述的链表。
-
我们需要更多信息。您是否已经在内存中的可变集合中拥有元素?还需要保留原订单吗?
-
根据已经请求的信息,您最好的方法可能是执行部分Fisher-Yates Shuffle,在
k迭代后停止。 -
您在寻找唯一索引处的元素吗?您在寻找独特的元素值吗?您需要按值排序或按索引排序的元素吗?
-
@JonSkeet - 我正在使用 LINQ,所以我认为这意味着如果需要它们可以在内存中。它们位于 Queryable DbSet 中。我不需要保留原始顺序 - 我宁愿不要,以随机性的名义。