2012-04-20 19 views
34

C# ile çok fazla deneyimim yok ve PHP'den ilişkilendirici dizilerle kullanıyorum.İlişkisel diziyi C# ile işlemenin en kolay yolu nedir?

C# içinde liste sınıfı ve ham dizi olduğunu görüyorum, ancak bazı dize anahtarlarını bir anda ilişkilendirmek istiyorum.

Bunu işlemenin en kolay yolu nedir?

Thx!

+5

@Servy: Sadece bazı terminolojide nitpick yapmak için, ** no **, bu bir ** ilişkisel dizi **. Radu doğru. http://en.wikipedia.org/wiki/Associative_array. Ayrıca, dizilerin sayılarla indekslenmediği çok sayıda dil vardır; JavaScript birdir. Ve terminolojiyi eleştirirken: ** birleşik dizinin ** ** hash tablosu ** olarak uygulanması gerekmez. * Uygulama detayları * ile * soyut veri tipini * karıştırıyorsunuz. Örneğin birleşik bir dizi, dengeli ikili ağaç tarafından uygulanabilir. –

+0

Açıklama için teşekkürler Eric. – Servy

cevap

61

Sözlük sınıfını kullanın. İhtiyacın olanı yapmalı. Referans here.

Yani böyle bir şey yapabilirsiniz:

IDictionary<string, int> dict = new Dictionary<string, int>(); 
dict["red"] = 10; 
dict["blue"] = 20; 
+2

Bir sözlüğün, doğrusal indekslemeye izin vermediğini anlayın (bu şekilde nasıl girdiğinizden emin değilseniz), yani yukarıdaki örnekte, 'dict [0] '(sözlüğün ilk öğesini alma denemesi) derlenmeyecektir. Bu çeşitli şekillerde çalışabilirsiniz; En kolayı, bir kerede Dictionary'in KeyValuePair nesnelerini numaralandırmak için Linq kullanmasıdır. Ancak sipariş garanti edilmez (ya da en azından sadece bir uygulama detayı sayesinde garanti edilir). – KeithS

+9

@KeithS Gereksinim duyulması gereken bir [OrderedDictionary] (http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx) var. – Servy

+1

Tamamen doğru ve çalışıyor! –

12

bir sözlük çalışacaktır ancak .NET inşa ilişkilendirilebilir diziler içeren bir tane örneği NameValueCollection sınıf (System.Collections.Specialized.NameValueCollection) 'dir..

Sözlüğe göre küçük bir avantaj, varolmayan bir anahtarı okumaya çalışırsanız, bir istisna atmak yerine null değerini döndürür. Aşağıda değerleri belirlemenin iki yolu vardır.

NameValueCollection list = new NameValueCollection(); 
list["key1"] = "value1"; 

NameValueCollection list2 = new NameValueCollection() 
{ 
    { "key1", "value1" }, 
    { "key2", "value2" } 
}; 
İlgili konular