You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在按TaskCount升序排序时随机排列同值Tester对象的Name顺序?

实现按TaskCount升序且同值元素随机排序的方法

你提到默认OrderBy按TaskCount排序后同值元素顺序固定,本质是因为.NET的OrderBy是稳定排序——当元素的排序键(这里是TaskCount)相等时,会保留它们在原列表中的相对顺序,并非按Name排序(你例子里A在前只是因为它在原列表中先出现)。

要实现同TaskCount的元素随机排序,有两种简单可行的方式:

方法一:用ThenBy附加随机排序键

先按TaskCount升序排序,再给每个元素分配一个随机数作为次级排序键,让同组元素基于随机数打乱顺序:

var random = new Random();
var sortedTesters = testers
    .OrderBy(t => t.TaskCount)
    .ThenBy(t => random.Next())
    .ToList();

注意:必须提前创建一个Random实例,不要在ThenBy的委托里直接new Random()——短时间内多次创建Random会使用相同的系统时间种子,导致生成重复的随机数,失去随机效果。

方法二:分组后每组内随机排序

先按TaskCount将元素分组,对每组内的元素单独随机排序,再按TaskCount升序合并各组:

var random = new Random();
var sortedTesters = testers
    .GroupBy(t => t.TaskCount)
    .OrderBy(g => g.Key)
    .SelectMany(group => group.OrderBy(_ => random.Next()))
    .ToList();

这两种方法都能保证TaskCount升序的前提下,同值元素的顺序随机,你的例子中A和C会有50%概率呈现ACB或CAB的排列。

内容的提问来源于stack exchange,提问作者Emory Lu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:45:54