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

即使在应用返回 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;

            });


眼眸繁星
浏览 164回答 1
1回答

斯蒂芬大帝

如果所有项目都返回 0,订单不应该与原始数组保持一致吗?不,List<T>.Sort...执行不稳定排序;也就是说,如果两个元素相等,它们的顺序可能不会被保留。相反,稳定排序保留相等元素的顺序如果你想要一个稳定的排序,你可以使用 LINQ 的OrderBy.此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。所以像:games&nbsp;=&nbsp;games.OrderBy(g&nbsp;=>&nbsp;/*&nbsp;logic&nbsp;here&nbsp;*/) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ToList();
打开App,查看更多内容
随时随地看视频慕课网APP