У меня есть словарь, содержащий данные о ячейках на карте.Различные методы выполняют различные просмотры данных ячейки в словаре, но во многих случаях просто необходим список ячеек назад.Ключи в основном предназначены только для эффективного поиска в классе 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));
}
Я ожидаю, что каждая карта, созданная из одного и того же начального числа, получится одинаковой. Иногда это не так.Я подозреваю, что приведенные выше методы являются ответственными, и я пытаюсь доказать это тем или иным способом, чтобы найти решение или перейти к поиску в другом месте.