Ответ 1
Вы хотите FindIndex (Predicate)
int index = list.FindIndex(MiniMapRecord p => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);
У меня есть список настраиваемых объектов с двумя свойствами в качестве идентификаторов (IDa, IDb) каждый раз, когда я удаляю объект, мне нужно знать его индекс. как я могу получить индекс объекта, не зацикливая весь список?
List<CustomObject> list =new List<CustomObject>();
list.RemoveAll((MiniMapRecord p) => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);
Вы хотите FindIndex (Predicate)
int index = list.FindIndex(MiniMapRecord p => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);
Как утверждали другие, нет способа избежать перебора элементов, чтобы найти их, если вы не выполните:
Помните индексы. Когда вы создаете список, сохраните соответствующие индексы в переменной-члене. Возможно, это не подходит для вашей проблемы.
Или:
Сохраните список и выполните двоичный поиск элемента. Это также может не работать, потому что у вас есть два идентификатора.
IndexOf()
- простое решение, но оно будет стоить O (N) (линейное).
Вы можете использовать метод IndexOf()
, чтобы получить индекс данного элемента вашего List<>
.
Однако обратите внимание, что поскольку связанный список не подразумевает никакого произвольного доступа, действительно нет другого способа найти определенный элемент (и, следовательно, его индекс), отличный от начала с самого начала и проверки одного элемента за раз.
Используйте метод .IndexOf()
списка, чтобы найти индекс, затем используйте .RemoveAt()
, чтобы удалить его.