C#

2010-08-10 8 views
6

bir liste aramak için nasıl bir liste şöyle var:C#

List<string[]> countryList 

ve dize dizisinin her bir elemanı 3 elemanlı başka dizidir.

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

nasıl mesela belirli dizisi için countryList arayabilirsiniz:

Yani countryList[0] dizi içerebilir nasıl basitçe countryList.Any kullanın varlığını kurmak

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

cevap

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

için countryList aramak için. Öğenin dizinini veya yoksa -1 değerini bulmak için countryList.FindIndex'u kullanın.

+0

ListListemde bir FirstOrDefault yönteminin olmaması gibi bir şeyi özlüyorum, bir Find ve FindAll'im var. Ve benim bir SekansEqual yok. .NET 3.5 – Bob

+0

ah kullanıyorum, system.linq almadım ... 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

Hata ... Eşit yöntem, dizinin içindeki değerleri değil referansları karşılaştırır, böylece hiçbir zaman bir şey bulamaz. –

+0

! LukaszW.pl, Ben zaten – Graviton

+0

cevabını güncelledim. Şimdi daha iyi;) –