¿Cómo puedo encontrar el índice de un elemento en una lista sin recorrerlo?
Actualmente, esto no se ve muy bien: busca en la lista el mismo artículo dos veces, solo para obtener el índice:
var oProp = something;
int theThingIActuallyAmInterestedIn = myList.IndexOf(myList.Single(i => i.Prop == oProp));
int index
?Para tipos simples puede usar "IndexOf":
fuente
EDITAR: si solo está utilizando
List<>
ay solo necesita el índice, entoncesList.FindIndex
es el mejor enfoque. Dejaré esta respuesta aquí para aquellos que necesitan algo diferente (por ejemplo, encima de cualquieraIEnumerable<>
).Utilice la sobrecarga de los
Select
cuales toma un índice en el predicado, por lo que transforma su lista en un par (índice, valor):Luego:
O si solo desea el índice y lo está usando en varios lugares, podría escribir fácilmente su propio método de extensión, que en
Where
lugar de devolver los elementos originales, devolvió los índices de esos elementos que coincidían con el predicado.fuente
Single()
operación itera sobre esa secuencia y encuentra el elemento único que coincide con el predicado. Para más detalles, lea mi serie de blogs edulinqSi no desea usar LINQ, entonces:
de esta manera, está iterando la lista solo una vez.
fuente
FindIndex
fuera de interés?Aquí está el código para la lista de cadenas:
Aquí está el código para la lista de enteros:
fuente
Aquí hay un método de extensión de copiar / pegar para IEnumerable
Disfrutar.
fuente
Si alguien se pregunta por la
Array
versión, es así:fuente