Зацикливание словарь в C # - PullRequest
3 голосов
/ 09 июля 2009

Я понимаю, что вы не можете перебирать словарь в C # и редактировать базовый словарь, как в следующем примере:

Dictionary<Resource, double> totalCost = new Dictionary<Resource, double>();
// Populate the Dictionary in here - (not showing code).    
foreach (Resource resource in totalCost.Keys)
{
     totalCost[resource] = 5;
}

Один из способов исправить это - создать список, поддерживаемый ключами словаря, например:

Dictionary<Resource, double> totalCost = new Dictionary<Resource, double>();
// Populate the Dictionary in here - (not showing code).    
foreach (Resource resource in new List(totalCost.Keys))
{
     totalCost[resource] = 5;
}

Поскольку я не редактирую сами ключи, есть ли причина, по которой этого не следует делать, или что неправильно выбирать это в качестве решения. (Я понимаю, что если бы я редактировал эти клавиши, это могло бы вызвать много проблем.)

Спасибо.

Редактировать: Исправлен мой пример кода. Извините за это.

Ответы [ 4 ]

9 голосов
/ 09 июля 2009

Вы можете перебирать словари с помощью KeyValuePair class.

Dictionary<string, string> d1 = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> val in d1)
{ 
    ...
}
7 голосов
/ 09 июля 2009

в ваших примерах мне не кажется, что вы редактируете значения словаря (или ключи)?

В целом ваше решение выглядит хорошо, вы могли бы сделать это с немного меньшим количеством кода, подобного этому:

List<double> total = new List<double>();
foreach (AKeyObject key in aDictionary.Keys.ToList())
{
   for (int i = 0; i < aDictionary[key].Count; i++)
   {
      total[i] += aDictionary[key][i];
   }
}
1 голос
/ 09 июля 2009

Ваш первый фрагмент кода выглядит хорошо для меня - вы вообще не редактируете словарь.

0 голосов
/ 09 июля 2009

Вот еще одна версия LINQ-esque:

totalCost = totalCost
     .ToDictionary( kvp => kvp.Key, 5 );

Или, если 5 не совсем то, что вы хотите:)

totalCost = totalCost
     .ToDictionary( kvp => kvp.Key, CalculateSomething(kvp.Value) );

(Примечание: это не редактирует основной словарь, а заменяет его новым)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...