加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中的结果每次都应该相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读