Как найти индекс элемента в списке, не просматривая его?
В настоящее время это выглядит не очень хорошо - поиск по списку одного и того же элемента дважды, просто чтобы получить индекс:
var oProp = something;
int theThingIActuallyAmInterestedIn = myList.IndexOf(myList.Single(i => i.Prop == oProp));
int index
?Для простых типов вы можете использовать «IndexOf»:
источник
РЕДАКТИРОВАТЬ: Если вы используете только
List<>
и вам нужен только индекс, тоList.FindIndex
это действительно лучший подход. Я оставлю этот ответ здесь для тех, кому нужно что-то другое (например, поверх любогоIEnumerable<>
).Используйте перегрузку
Select
которого занимает индекс в предикате, поэтому вы преобразуете свой список в пару (индекс, значение):Затем:
Или, если вам нужен только индекс, и вы используете его в нескольких местах, вы можете легко написать свой собственный метод расширения, который был похож
Where
, но вместо возврата исходных элементов он возвращал индексы тех элементов, которые соответствовали предикату.источник
Single()
операция выполняет итерацию по этой последовательности и находит единственный элемент, который соответствует предикату. Для получения более подробной информации прочитайте мою серию блогов edulinq: codeblog.jonskeet.uk/category/edulinqЕсли вы не хотите использовать LINQ, то:
Таким образом, вы повторяете список только один раз.
источник
FindIndex
, из интереса?Вот код для списка строк:
Вот код для списка целых чисел:
источник
Вот способ расширения для копирования / вставки для IEnumerable
Наслаждаться.
источник
Если кто-то интересуется
Array
версией, это выглядит так:источник