.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;
});

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

不,List<T>.Sort...

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

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

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

所以像这样:

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

最新更新