Сортировка коллекции NameValueCollection по значению в c # - PullRequest
1 голос
/ 18 октября 2011

У меня есть NameValueCollection, и я хотел бы отсортировать это по его значению. У кого-нибудь есть идеи, как это легко сделать? Я думал обернуть его в SortedList или SortedDictionairy, но я не уверен, с чего начать.

Тайс

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

Использование LINQ:

var sorted = nvc.OrderBy(kvp => kvp.Value);
1 голос
/ 29 июля 2012

Я думаю, что сложность решения зависит от того, заботишься ли ты о нескольких значениях на ключ. Если вам нужно только отсортировать первое значение для каждого ключа, следующее должно вернуть отсортированный результат как IEnumerable<KeyValuePair<string, string>>:

var sorted = nvc.AllKeys.OrderBy(key => nvc[key])
                .Select(key => new KeyValuePair<string, string>(key, nvc[key]));

Если вы заботитесь о нескольких значениях на ключ, вам, возможно, придется разделить каждое значение на KeyValuePair перед их сортировкой. Что-то вроде:

var sorted = nvc.AllKeys
                .SelectMany(key =>
                    nvc.GetValues(key)
                       .Select(val => new KeyValuePair<string, string>(key, val)))
                .OrderBy(kvp => kvp.Value);

Примеры:

Дано:

var nvc = new NameValueCollection() {
    { "key1", "c" },
    { "key1", "a" },
    { "key2", "b" }
};

Первый пример должен вернуть следующее IEnumerable<KeyValuePair<string, string>>:

key2: b
key1: c,a

Второй пример должен вернуть следующее IEnumerable<KeyValuePair<string, string>>:

key1: a
key2: b
key1: c
...