gpt4 book ai didi

c# - IEnumerable 的随机顺序

转载 作者:行者123 更新时间:2023-11-30 14:15:47 24 4
gpt4 key购买 nike

我有一个 IEnumerable 集合,如下所示

var result1 = GetResult1() // Returns 2,4,5,6

我必须兼顾元素并以随机方式创建另一个集合,结果如下:

var result2 = GetResult2(result1) // Returns 2,4,5,6 in a random order.
// An example output would be 4,6,2,5 in the resultant collection.

我是通过以下方式完成的:

var result1 = GetResult1();
var random = new Random();
var result2 = result1.OrderBy(order=>random.Next());

然而,问题在于,如果我访问 result2,result2 中的元素会再次打乱,即,如果我将 result2 的结果输出到控制台两次,这些元素会再次打乱。

请问如何保持这件制服。也就是说,一旦我处理了收藏,此后它应该保持不变。不过,我必须使用惰性求值,因为结果的规模非常大。

最佳答案

您正在寻找一种洗牌算法

请参阅以下 SO 线程以提供很好的扩展方法来完成这项工作:

Is using Random and OrderBy a good shuffle algorithm?

An extension method on IEnumerable needed for shuffling


要回答您的问题“为什么再次洗牌?”,这是因为 OrderBy 的工作方式(延迟执行)。你可以试试:

var result2 = result1.OrderBy(order=>random.Next()).ToList();

关于c# - IEnumerable 的随机顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9361470/

24 4 0