StringDictionary - как получить ключи и значения, используя один цикл? - PullRequest
21 голосов
/ 25 августа 2009

Я использую коллекцию StringDictionary для сбора пар значений ключей.

например:.

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

Во время поиска мне нужно сформировать два foreach, чтобы получить ключи и значения (т. Е.)

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

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

Есть ли способ получить пару в сингле foreach?

Ответы [ 6 ]

37 голосов
/ 25 августа 2009

Вы можете сделать цикл foreach в словаре, который даст вам DictionaryEntry в каждой итерации. Вы можете получить доступ к Key и Value свойствам этого объекта.

foreach (DictionaryEntry value in KeyValue)
{
    // use value.Key and value.Value
}
13 голосов
/ 25 августа 2009

StringDictionary может быть повторен как DictionaryEntry items:

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

Я бы посоветовал вам использовать более новый класс Dictionary<string,string>:

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);
}
3 голосов
/ 25 августа 2009

У вас уже много ответов. Но в зависимости от того, что вы хотите сделать, вы можете использовать LINQ.

Допустим, вы хотите получить список ярлыков, которые используют клавишу CTRL. Вы можете сделать что-то вроде:

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);
3 голосов
/ 25 августа 2009

Одного должно хватить:

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

  // Process key/value pair here
}

Или я неправильно понял ваш вопрос?

1 голос
/ 25 августа 2009

Вы можете просто перечислить по самому словарю. Он должен возвращать последовательность экземпляров DictionaryEntry.

Лучшая альтернатива - использовать Dictionary<string, string>.

1 голос
/ 25 августа 2009
foreach(DictionaryEntry entry in KeyValue)
{
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...