Сортировка списка .NET возвращает другой порядок после всех возвратов 0 - PullRequest
0 голосов
/ 28 мая 2018

Исходный список, который входит в этот список, выходит в другом порядке, даже если применяется возврат 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 Ответ

0 голосов
/ 28 мая 2018

порядок не должен совпадать с исходным массивом, если все элементы возвращают 0?

Нет, List<T>.Sort ...

выполняет нестабильную сортировку;то есть, если два элемента равны, их порядок может не сохраниться.Напротив, стабильная сортировка сохраняет порядок элементов, равных

Если вы хотите стабильную сортировку, вы можете использовать LINQ OrderBy.

Этот метод выполняет stable sort;то есть, если ключи двух элементов равны, порядок элементов сохраняется.Напротив, нестабильная сортировка не сохраняет порядок элементов, имеющих одинаковый ключ.

Так что-то вроде:

games = games.OrderBy(g => /* logic here */)
             .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...