Как отсортировать список словарей на основе значения в ключе в словаре в C # .NET Silverlight? - PullRequest
3 голосов
/ 09 марта 2012

Итак, у меня есть List из Dictionary<string, string> dict, и я хочу отсортировать List в алфавитном порядке по значению dict["Title"].

Как мне это сделать?

И что, если я хочу взять значение dict["Title"], изменить его как string title = dict["Title"] + "xyz";, а затем использовать измененный title в качестве значения сортировки этого dict (без фактического изменения dict["Title"]) ...

Как бы я поступил так же?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 09 марта 2012

Linq it:

var dicts = new List<Dictionary<string, string>>();

var sort = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] : string.Empty);
var sort2 = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] + "xyz" : string.Empty);
4 голосов
/ 09 марта 2012

Кажется, вы пытаетесь сказать что-то вроде этого:

List<Dictionary<string, string>> list;

И то, что вы хотите сделать, это что-то вроде

list.Sort();

Но не совсем.Таким образом, вместо этого вы можете либо создать класс-оболочку для Dictionary<string, string>, а затем перегрузить методы сравнения, либо создать метод сравнения, например

static int CompareDicts(Dictionary<string, string> x, Dictionary<string, string> y) {
  return String.Compare(x["Title"],y["Title"]);
}

или

static int CompareDicts(Dictionary<string, string> x, Dictionary<string, string> y) {
  return String.Compare(x["Title"]+"xyz",y["Title"]+"xyz");
}

А затем сортировать

list.Sort(CompareDicts);

Редактировать: Для набора функций сортировки в списке, проверьте http://msdn.microsoft.com/en-us/library/3da4abas.aspx

0 голосов
/ 09 марта 2012
var dicts = new List<Dictionary<string, string>>();

// populate dictionaries.

var sorted = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] : string.Empty));
0 голосов
/ 09 марта 2012

LINQ является решением здесь.

dictionary.OrderBy(o => o.Key)
dictionary.OrderByDescending(o => o.Key)

И для модифицированной версии

dictionary.OrderBy(o => o.Key + "xyz")
dictionary.OrderByDescending(o => o.Key + "xyz")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...