ultimo - obtener elemento de una lista c#
Compruebe si la lista contiene un elemento que contiene una cadena y obtiene ese elemento (9)
Deberías poder usar Linq aquí:
var matchingvalues = myList
.Where(stringToCheck => stringToCheck.Contains(myString));
Si simplemente desea devolver el primer elemento correspondiente:
var match = myList
.FirstOrDefault(stringToCheck => stringToCheck.Contains(myString));
if(match != null)
//Do stuff
Al buscar una respuesta a esta pregunta, me he encontrado con otros similares que utilizan LINQ pero no he podido comprenderlos completamente (y por lo tanto, implementarlos), ya que no estoy familiarizado con esto. Lo que me gustaría, básicamente, es esto:
- Compruebe si algún elemento de una lista contiene una cadena específica.
- Si lo hace, obtén ese elemento.
Honestamente, no sé cómo voy a hacer eso. Lo que puedo pensar es esto (no funciona, por supuesto):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
Sé POR QUÉ no funciona:
-
myList.Contains()
no devuelvetrue
, ya que comprobará si un elemento completo de la lista coincide con la cadena especificada. -
myList.IndexOf()
no encontrará una ocurrencia, ya que, como es el caso de nuevo, buscará un elemento que coincida con la cadena.
Aún así, no tengo ni idea de cómo resolver este problema, pero creo que tendré que usar LINQ como se sugiere en las preguntas similares a las mías. Dicho esto, si ese es el caso aquí, me gustaría que el que responde me explique el uso de LINQ en su ejemplo (como dije, no me molesté en mi tiempo con C #). Gracias de antemano chicos (¿y chicas?).
EDITAR: He encontrado una solución; simplemente recorra la lista, verifique si el elemento actual contiene la cadena y luego establezca una cadena igual al elemento actual. Me pregunto, sin embargo, ¿hay una manera más eficiente que esto?
string myString = "bla";
string element = "";
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Contains(myString))
element = myList[i];
}
La respuesta básica es que necesita iterar a través del ciclo y verificar que cualquier elemento contenga la cadena especificada. Entonces, digamos que el código es
foreach(string item in myList)
{
if(item.Contains(myString))
return item;
}
El código equivalente pero concisa es
mylist.Where(x => x.Contains(myString)).FirstOrDefault();
Aquí, x es un parámetro que actúa como elemento en el código anterior.
Para mantenerlo simple, usa esto;
foreach(string item in myList)//Iterate through each item.
{
if(item.Contains("Search Term")//True if the item contains search pattern.
{
return item;//Return the matched item.
}
}
Alternativamente, para hacer esto con for loop, use esto;
for (int iterator = 0; iterator < myList.Count; iterator++)
{
if (myList[iterator].Contains("String Pattern"))
{
return myList[iterator];
}
}
Puede usar el método de extensión FirstOrDefault
de Linq:
string element = myList.FirstOrDefault(s => s.Contains(myString));
Esto devolverá el primer elemento que contiene la subcadena myString
, o null
si no se encuentra dicho elemento.
Si todo lo que necesita es el índice, use el método FindIndex
la clase List<T>
:
int index = myList.FindIndex(s => s.Contains(myString));
Esto devolverá el índice del primer elemento que contiene la subcadena myString
, o -1
si no se encuentra dicho elemento.
Si desea una lista de cadenas que contienen su cadena:
var newList = myList.Where(x => x.Contains(myString)).ToList();
Otra opción es usar Linq FirstOrDefault
var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();
Tenga en cuenta que el método Contains
distingue entre mayúsculas y minúsculas.
muchas buenas respuestas aquí, pero utilizo una simple como la siguiente, usando Exists
foreach (var setting in FullList)
{
if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName))
setting.IsActive = true; // do you business logic here
else
setting.IsActive = false;
updateList.Add(setting);
}
puedes usar
var match=myList.Where(item=>item.Contains("Required String"));
foreach(var i in match)
{
//do something with the matched items
}
LINQ le proporciona capacidades para "consultar" cualquier colección de datos. Puede usar la sintaxis como una consulta de base de datos (seleccionar, dónde, etc.) en una colección (aquí la colección (lista) de cadenas).
por lo que está haciendo como "obtener elementos de la lista donde satisface una condición dada"
dentro de Donde estás usando una "expresión lambda"
decir brevemente la expresión lambda es algo así como (parámetro de entrada => valor de retorno)
entonces para un parámetro "artículo", devuelve "item.Contains (" required string ")". Por lo tanto, devuelve verdadero si el elemento contiene la cadena y, por lo tanto, se selecciona de la lista, ya que cumple la condición.
for (int i = 0; i < myList.Length; i++)
{
if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate)
{
return i;
}
}
Los viejos bucles de moda casi siempre son los más rápidos.
string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
//found
}