Может ли преобразование из IEnumerable <T>в List <T>с помощью ToList () изменить порядок элементов? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть словарь, содержащий данные о ячейках на карте.Различные методы выполняют различные просмотры данных ячейки в словаре, но во многих случаях просто необходим список ячеек назад.Ключи в основном предназначены только для эффективного поиска в классе Map.

У меня есть несколько методов, которые процедурно генерируют картографические данные, и у меня странная ошибка, которая приводит к тому, что картографические данные появляются по-разному при одном и том же запускесемена.Я полагаю, что это связано с некоторыми методами, которые возвращают картографические данные, иногда возвращая список в другом порядке.

Первоначально я не упорядочивал данные из своих запросов, которые выглядели как красный флаг при заданном порядке словаря.не гарантируетсяПоэтому первое, что я сделал, хотя это и неэффективно, это добавил orderby в конце запроса.Это, похоже, уменьшает, но не устраняет частоту ошибки.

Одна из вещей, которую делает этот код, после запроса Linq, который возвращает IEnumerable<T> Я вызываю .ToList() для возвратаList<T> для звонящего.Возможно ли, что это преобразование из IEnumerable в List иногда меняет порядок элементов?

Это основной метод, который меня беспокоит.Он вызывается генерацией карты, которая затем использует случайную ElementAt для получения случайной ячейки.Если порядок в списке меняется, то даже если используется одно и то же случайное число, результаты будут другими.

        public List<MapCell> GetCellsForSector(int sector)
        {
            IEnumerable<MapCell> expression = from cell in mapData.Values
                where cell.sector == sector && cell.cellValid && cell.cellUsed
                orderby cell.location select cell;

            return expression.ToList();
        }
        public MapCell RandomCellInSector(int sector)
        {
            List<MapCell> filteredList = GetCellsForSector(sector);
            return filteredList.ElementAt(Random.Range(0, filteredList.Count));
        }

Я ожидаю, что каждая карта, созданная из одного и того же начального числа, получится одинаковой. Иногда это не так.Я подозреваю, что приведенные выше методы являются ответственными, и я пытаюсь доказать это тем или иным способом, чтобы найти решение или перейти к поиску в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...