为了账号安全,请及时绑定邮箱和手机立即绑定

.NET 列表排序在所有返回 0 后返回不同的顺序

.NET 列表排序在所有返回 0 后返回不同的顺序

C#
眼眸繁星 2021-07-08 14:31:08
即使在应用返回 0 时,进入此的初始列表也会出现不同的顺序。我认为返回 0 会使游戏保持与最初处理的顺序相同,但情况似乎并非如此。如果没有其他任何回报被击中,订单不应该与原始数组保持一致吗?games.Sort((game1, game2) =>            {                DateTime? minMaxDate1 = null;                DateTime? minMaxDate2 = null;                minMaxDate1 = FindDateRestriction(autoSchedulerLists, game1.AwayTeam, minMaxDate1);                minMaxDate1 = FindDateRestriction(autoSchedulerLists, game1.HomeTeam, minMaxDate1);                minMaxDate2 = FindDateRestriction(autoSchedulerLists, game2.AwayTeam, minMaxDate2);                minMaxDate2 = FindDateRestriction(autoSchedulerLists, game2.HomeTeam, minMaxDate2);                if (minMaxDate1.HasValue && !minMaxDate2.HasValue)                    return -1;                if (minMaxDate2.HasValue && !minMaxDate1.HasValue)                    return -1;                if (minMaxDate1.HasValue && minMaxDate2.HasValue && minMaxDate1 != minMaxDate2)                {                    return minMaxDate1 < minMaxDate2 ? -1 : 1;                }                return 0;            });
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

如果所有项目都返回 0,订单不应该与原始数组保持一致吗?

不,List<T>.Sort...

执行不稳定排序;也就是说,如果两个元素相等,它们的顺序可能不会被保留。相反,稳定排序保留相等元素的顺序

如果你想要一个稳定的排序,你可以使用 LINQ 的OrderBy.

此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。

所以像:

games = games.OrderBy(g => /* logic here */)
             .ToList();


查看完整回答
反对 回复 2021-07-10
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信