Каков наилучший способ перебора словаря?

Не удается найти путь firefoxbinary. Установите путь firefox до использования драйвера firefox.

System.setProperty("webdriver.firefox.bin", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
2345
задан Uwe Keim 10 May 2018 в 15:09
поделиться

8 ответов

foreach(KeyValuePair<string, string> entry in myDictionary)
{
    // do something with entry.Value or entry.Key
}
3369
ответ дан jasonmerino 10 May 2018 в 15:09
поделиться

Зависит от того, являетесь ли Вы после ключей или значений...

Из описания MSDN Dictionary(TKey, TValue) Класса:

// When you use foreach to enumerate dictionary elements,
// the elements are retrieved as KeyValuePair objects.
Console.WriteLine();
foreach( KeyValuePair<string, string> kvp in openWith )
{
    Console.WriteLine("Key = {0}, Value = {1}", 
        kvp.Key, kvp.Value);
}

// To get the values alone, use the Values property.
Dictionary<string, string>.ValueCollection valueColl =
    openWith.Values;

// The elements of the ValueCollection are strongly typed
// with the type that was specified for dictionary values.
Console.WriteLine();
foreach( string s in valueColl )
{
    Console.WriteLine("Value = {0}", s);
}

// To get the keys alone, use the Keys property.
Dictionary<string, string>.KeyCollection keyColl =
    openWith.Keys;

// The elements of the KeyCollection are strongly typed
// with the type that was specified for dictionary keys.
Console.WriteLine();
foreach( string s in keyColl )
{
    Console.WriteLine("Key = {0}", s);
}
88
ответ дан Yvette Colomb 10 May 2018 в 15:09
поделиться

Существует много опций. Мой любимый KeyValuePair

Dictionary<string, object> myDictionary = new Dictionary<string, object>();
// Populate your dictionary here

foreach (KeyValuePair<string,object> kvp in myDictionary)
{
     // Do some interesting things
}

, можно также использовать Ключи и Наборы Значений

25
ответ дан particulator 10 May 2018 в 15:09
поделиться

Если бы Вы пытаетесь использовать универсальный Словарь в C# как Вы, использовал бы ассоциативный массив на другом языке:

foreach(var item in myDictionary)
{
  foo(item.Key);
  bar(item.Value);
}

Или, если только необходимо выполнить итерации по набору ключей, использование

foreach(var item in myDictionary.Keys)
{
  foo(item);
}

И наконец, если Вы только интересуетесь значениями:

foreach(var item in myDictionary.Values)
{
  foo(item);
}

(Обращают внимание, что var ключевое слово является дополнительным C# 3.0 и выше функции, Вы могли также использовать точный тип своих ключей/значений здесь)

783
ответ дан Jacob 10 May 2018 в 15:09
поделиться

Я сказал бы, что foreach является стандартным путем, хотя это, очевидно, зависит от того, что Вы ищете

foreach(var kvp in my_dictionary) {
  ...
}

, это, что Вы ищете?

47
ответ дан Community 10 May 2018 в 15:09
поделиться

Если говорят, Вы хотите выполнить итерации по набору значений по умолчанию, я полагаю, что можно реализовать IEnumerable<>, Где T является типом объекта значений в словаре, и "это" - Словарь.

public new IEnumerator<T> GetEnumerator()
{
   return this.Values.GetEnumerator();
}
2
ответ дан 10 May 2018 в 15:09
поделиться
  • 1
    @Xiong: Я действительно don' t знают, но по некоторым причинам я нахожу меня более довольным представленными классами, чем представленные функции. Возможно, it' s, потому что с функциями, Вы заканчиваете тем, что представили весь Ваши переменные уровня модуля... – aviraldg 14 June 2010 в 23:05

Я нашел этот метод в документации для класса DictionaryBase на MSDN:

foreach (DictionaryEntry de in myDictionary)
{
     //Do some stuff with de.Value or de.Key
}

Это было единственным, я смог получить функционирование правильно в классе, который наследовался DictionaryBase.

5
ответ дан 11 May 2018 в 01:09
поделиться
  • 1
    хм; я didn' t знают " script" средства " sequential" и " procedural" по определению (даже если никакое полезное различие между процедурным, сценарием и OO не может быть сделано); это кажется Вашими переговорами по ответу о представлении philophical (Мировоззрение): объекты везде. Философски может быть корректным, но как делает это относится к программированию, где " objects" что-то вроде некоторым образом определенного, так, чтобы Вы can' t называют, скажем, " процессор register" объект тот же путь Вы звоните a в string a объект ? Существуют уровни и уровни абстракции, которые исчезают, если Вы говорите, что все - object.imo – ShinTakezou 15 June 2010 в 08:05

Ниже вы предложили выполнить итерацию

Dictionary<string,object> myDictionary = new Dictionary<string,object>();
//Populate your dictionary here

foreach (KeyValuePair<string,object> kvp in myDictionary) {
    //Do some interesting things;
}

FYI, foreach не работает, если значение имеет тип object.

11
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: