c# – IEnumerable的随机顺序
发布时间:2020-12-16 01:51:18 所属栏目:百科 来源:网络整理
导读:我有一个IEnumerable集合如下 var result1 = GetResult1() // Returns 2,4,5,6 我必须以随机方式处理元素并创建另一个集合,结果如下: var result2 = GetResult2(result1) // Returns 2,6 in a random order.// An example output would be 4,6,2,5 in the r
我有一个IEnumerable集合如下
var result1 = GetResult1() // Returns 2,4,5,6 我必须以随机方式处理元素并创建另一个集合,结果如下: var result2 = GetResult2(result1) // Returns 2,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的结果输出到控制台两次,则元素将再次变为juggled. 能告诉你如何保持这种制服.一旦我处理了这个收藏品,它就应该保持相同的状态.我必须使用懒惰的评估,因为结果非常大. 解决方法
我看到你需要对结果进行延迟评估,如果是这种情况,你可以做的是:
var randomNumbers = result1.Select(r => random.Next()).ToArray(); var orderedResult = result1.Zip(randomNumbers,(r,o) => new { Result = r,Order = o }) .OrderBy(o => o.Order) .Select(o => o.Result); 通过对随机数调用ToArray(),这些不会改变.当您最终需要结果中的项目时,您可以使用随机数拉链项目,订购随机数并选择结果. 只要结果中的项目以相同的顺序排列,orderedResult中的结果每次都应该相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |