#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 );
}