2009-08-25 3 views
18

Używam kolekcji StringDictionary do zbierania par wartości klucza.C# - StringDictionary - jak uzyskać klucze i wartości za pomocą pojedynczej pętli?

Np .:

StringDictionary KeyValue = new StringDictionary(); 
KeyValue.Add("A", "Load"); 
KeyValue.Add("C", "Save"); 

Podczas pobierania muszę tworzą dwa foreach dostać klucze i wartości (tj)

foreach(string key in KeyValue.Values) 
{ 
    ... 
} 

foreach(string key in KeyValue.Keys) 
{ 
    ... 
} 

Czy istnieje jakiś sposób, aby uzyskać parę w pojedynczym foreach?

Odpowiedz

33

Możesz wykonać pętlę foreach w słowniku, co da Ci DictionaryEntry w każdej iteracji. Z tego obiektu można uzyskać dostęp do właściwości Key i Value.

foreach (DictionaryEntry value in KeyValue) 
{ 
    // use value.Key and value.Value 
} 
+0

Dzięki, potrzebowałem dokładnie tej odpowiedzi, iterując przez "this.Context.Parameters", która zwraca kolekcję DictionaryEntry. – Bravo

2

One powinny być wystarczająco:

foreach (string key in KeyValue.Keys) 
{ 
    string value = KeyValue[key]; 

    // Process key/value pair here 
} 

Albo ja źle zrozumieć swoje pytanie?

+0

To, co rozumiesz, jest właściwe! Odpowiedź każdej osoby działa doskonale – user160677

+0

Ktoś ujął moją odpowiedź, bo ... aaaaauuuse ...? –

1
foreach(DictionaryEntry entry in KeyValue) 
{ 
    // ... 
} 
1

Możesz po prostu wyliczyć na samym słowniku. Powinien zwrócić sekwencję instancji DictionaryEntry.

Lepszą alternatywą jest użycie Dictionary<string, string>.

+0

Dzięki Mark.I podążę. – user160677

10

The StringDictionary można powtórzyć jak DictionaryEntry przedmiotów:

foreach (DictionaryEntry item in KeyValue) { 
    Console.WriteLine("{0} = {1}", item.Key, item.Value); 
} 

sugeruję skorzystanie z nowszych Dictionary<string,string> klasę Zamiast:

Dictionary<string, string> KeyValue = new Dictionary<string, string>(); 
KeyValue.Add("A", "Load"); 
KeyValue.Add("C", "Save"); 

foreach (KeyValuePair<string, string> item in KeyValue) { 
    Console.WriteLine("{0} = {1}", item.Key, item.Value); 
} 
+0

Pewnie .Zamienię tego na Słownik user160677

+0

to powinna być akceptowana odpowiedź. –

3

Masz już wiele odpowiedzi. Ale w zależności od tego, co chcesz zrobić, możesz użyć LINQ.

Załóżmy, że chcesz uzyskać listę skrótów, które używają klawisza CTRL. Możesz zrobić coś takiego:

var dict = new Dictionary<string, string>(); 
dict.Add("Ctrl+A", "Select all"); 
dict.Add("...", "..."); 

var ctrlShortcuts = 
    dict 
     .Where(x => x.Key.StartsWith("Ctrl+")) 
     .ToDictionary(x => x.Key, x => x.Value); 
+0

Fajnie! Ta też jest przydatna. – user160677

+0

Pytanie dotyczyło użycia StringDictionary, a nie Dictionary . –