2010-08-10 13 views
6

Tengo una lista de este modo:Cómo buscar una lista en C#

List<string[]> countryList 

y cada elemento de la matriz de cadenas es otra matriz con 3 elementos.

Así countryList[0] podría contener la matriz:

new string[3] { "GB", "United Kingdom", "United Kingdom" }; 

¿Cómo puedo buscar countryList para una matriz específica, por ejemplo, cómo buscar countryList para

new string[3] { "GB", "United Kingdom", "United Kingdom" }? 

Respuesta

10
return countryList.FirstOrDefault(array => array.SequenceEqual(arrayToCompare)); 

Para establecer la existencia simplemente, utilizar countryList.Any. Para encontrar el índice del elemento o -1 si no existe, use countryList.FindIndex.

+0

Me falta algo, ya que no tengo un método FirstOrDefault en mi objeto List , tengo Find y FindAll. Y no tengo un SequenceEqual. Estoy usando .NET 3.5 – Bob

+0

ah, no tenía system.linq importado ... ups! – Bob

1
// this returns the index for the matched array, if no suitable array found, return -1 

public static intFindIndex(List<string[]> allString, string[] string) 
{ 
    return allString.FindIndex(pt=>IsStringEqual(pt, string)); 
} 


private static bool IsStringEqual(string[] str1, string[] str2) 
{ 
    if(str1.Length!=str2.Length) 
     return false; 
    // do element by element comparison here 
    for(int i=0; i< str1.Length; i++) 
    { 
     if(str1[i]!=str2[i]) 
     return false; 
    } 
    return true; 
} 
+0

Incorrecto ... El método Equals compara las referencias, no los valores dentro de la matriz, por lo que nunca encontrará nada. –

+0

! LukaszW.pl, ya he actualizado la respuesta – Graviton

+0

Ahora es mejor;) –

Cuestiones relacionadas