2015-01-23 3 views
-2

Когда я пытаюсь сортировать словарь перед переходом, он не работает. Я считаю, что это потому, что словарь в C# неизменен? Есть ли какая-нибудь работа вокруг этого?C# Словарь Сортировка

if (arrFilter[i].strTitle.Equals("test")) { 
    arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator()); 
    } else { 
    arrFilter[i].dicValue.OrderBy(j => j.Key, new numComp()); 
} 

foreach (var item in arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator())) { 
// Traversing stuff 

} 
+0

** 1. ** Пожалуйста, включите в свой фрагмент кода объявления переменных (например, для 'arrFilter' и типа, содержащего элементы' strTitle' и 'dicValue'). ** 2. ** Что именно вы имеете в виду, говоря: «Это не работает»? – stakx

ответ

4

OrderBy метод вы используете метод LINQ Extension, который в данном случае возвращает IEnumerable<KeyValuePair<,>>. Он не сортирует словарь на месте и не возвращает отсортированный словарь. Он просто перечисляет словарь и возвращает отсортированный перечислимый. Вот почему вы должны называть его при прохождении (или, по крайней мере, использовать его возвращаемое значение при прохождении).

Обратите внимание, что словарь изменчив (вопреки вашей вере). Однако его заказ не находится под вашим контролем. Если вы хотите контролировать заказ, вы можете использовать SortedDictionary<,>.

+0

Чтобы быть очень педантичным, возвращается отсортированное перечисление «должно быть», которое будет перечислимым, которое в конечном итоге вернет отсортированные элементы при/если перечислены ». Это также неожиданно не подведет, когда вы добавляете элементы в словарь между получением результата «dictionary.OrderBy (...)» и фактического перечисления ... –

1

Вы можете просто преобразовать Словарь в список: Список. По сути:

// var (List<KeyValuePair<string, string>> 
var container = myDictionary.ToList();  
container.Sort((index, nextIndex) => 
{ 
    return index.Value.CompareTo(nextIndex.Value); 
}); 

Это обеспечит Сгруппировать или Заказать возможности, которые не включены в коллекция словарей уже. Надеюсь, это поможет.