Como posso encontrar o índice de um item em uma lista sem percorrê-lo?
Atualmente, isso não parece muito bom - pesquisar na mesma lista o mesmo item duas vezes, apenas para obter o índice:
var oProp = something;
int theThingIActuallyAmInterestedIn = myList.IndexOf(myList.Single(i => i.Prop == oProp));
int index
?Para tipos simples, você pode usar "IndexOf":
fonte
Edição: Se você estiver usando apenas um
List<>
e você só precisa do índice, entãoList.FindIndex
é realmente a melhor abordagem. Deixarei esta resposta aqui para aqueles que precisam de algo diferente (por exemplo, além de qualquer umIEnumerable<>
).Use a sobrecarga
Select
que requer um índice no predicado, para transformar sua lista em um par (índice, valor):Então:
Ou, se você deseja apenas o índice e o usa em vários lugares, pode escrever facilmente seu próprio método de extensão
Where
, mas, em vez de retornar os itens originais, ele retornou os índices dos itens correspondentes ao predicado.fonte
Single()
operação itera sobre essa sequência e localiza o item único que corresponde ao predicado. Para mais detalhes, leia meus edulinq Série Blog: codeblog.jonskeet.uk/category/edulinqSe você não quiser usar o LINQ, então:
Dessa forma, você está iterando a lista apenas uma vez.
fonte
FindIndex
não interessa?Aqui está o código para a lista de seqüências de caracteres:
Aqui está o código da lista de números inteiros:
fonte
Aqui está um método de extensão capaz de copiar / colar para IEnumerable
Aproveitar.
fonte
Se alguém se perguntar pela
Array
versão, ela será assim:fonte