Как выполнить итерацию по определенному диапазону пар значений ключей в словаре?

#c# #loops #for-loop #foreach #iterator

#c# #циклы #для цикла #foreach #итератор

Вопрос:

У меня есть словарь с 4 элементами пары значений ключей. Теперь у меня есть 2 цикла foreach (цикл 1 и цикл 2), чего я пытаюсь достичь:

Цикл 1:

Перебирайте первые 2 элемента, используя этот foreachloop.

Цикл 2:

Выполните цикл по пунктам 3-4, используя этот foreachloop.

Я не уверен, возможно ли это, поэтому я попробовал это вместо:

 @for (int DictItem = 0; i < finalDictionary.Count; DictItem  )
{
   var test = finalDictionary[i];
   if(test == 1 || test == 2)
   { 
          //First 2 items
   }

  if(test == 3 || test == 4)
  { 
          //3th and 4th items
  }
}
  

Здесь я пытаюсь получить пару значений ключей по индексу цикла for, однако это не работает.

Заранее спасибо

Комментарии:

1. Кстати, словари не упорядочены, поэтому идея о существовании «диапазона» ключей дезинформирована. Вы можете буферизировать все ключи, а затем отсортировать их, а затем выполнить итерацию по этому диапазону, конечно.

2. Какой у вас тип finalDictionary ? Похоже Dictionary<Int32,Int32> , это правильно? Что это представляет?

3. Это вложенный словарь: @foreach (KeyValuePair<строка, Dictionary<строка, List<Точка данных>>> запись в finalDictionary)

Ответ №1:

Словари в .NET (т. Е. Реализации IDictionary<TKey,TValue> ) не имеют определенного порядка пар ключ / значение.

Однако, если ваши ключи можно сортировать (и они реализуются IComparable<TKey> ), вы можете сделать это:

 Dictionary<TKey,TValue> dict = ...
List<TKey> sortedKeys = dict.Keys.OrderBy( k => k ).ToList();

foreach( TKey key in sortedKeys.Take(2) ) {
    TValue value = dict[key];

    Console.WriteLine( value );
}

foreach( TKey key in sortedKeys.Skip(2).Take(2) ) {
    TValue value = dict[key];

    Console.WriteLine( value );
}