I have a method returning a List, let's call it GetSomeStrings()
.
I have an extension method on string class, returning number of characters in the string, eg. myString.Number('A')
.
I would like to, in a single line, grab a dictionary. An entry of the dictionary contains the string, and the number of a chosen character in the string.
Actually I do the following:
var myDic = GetSomeStrings().ToDictionary(x=>x.Number('A'));
which gives me a dictionary
; I would like the key as the string.
After, I'd like to order the dictionary on the int value. It is possible to include this in the previous statement ?
I'd really like to avoid a collection enumeration to sort or create the dictionary from the list, which is what i do actually without troubles. Thank you for your optimization help !
Обычный словарь не отсортирован, но вы можете использовать SortedDictonary:
var sortedDict = new SortedDictionary<string, int>(
GetSomeStrings().ToDictionary(x => x, y => y.Number('A')));
Этот оператор должен дать вам SortedDictionary, отсортированный по строковому ключу.
Чтобы создать свой словарь, вы можете сделать следующее:
var strings = new[] { "one", "2", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
var dictionary = strings.GroupBy(x => x.Length.ToString()).ToDictionary(x => x.Key, x => x);
Обратите внимание на использование "ToString()" для преобразования длины строки в строку.
Кроме того, сортировка словаря обычно не имеет смысла. Вы можете сортировать элементы в каждом ключе словаря, или вы можете сортировать ключи словаря, когда вы хотите прокрутить их.
var sortedKeys = dictionary.Keys.OrderBy(x => x);
var sortedValues = dictionary["1"].OrderBy(x => x);
Вам нужно использовать перегруженную версию ToDictionary, которая принимает две функции:
var myDic = GetSomeStrings().ToDictionnary(x => x, x => x.Number('A'));
Обе функции принимают любой объект, который вы используете для создания словаря. Первый производит Ключ; второй, Ценность.
var myDic = GetSomeStrings()
.ToDictionary(x => x, x => x.Number('A'));
Получение словаря нужным вам способом.
Редактировать: Добавлен порядок. Сначала упорядочивает строки, затем помещает их в диктофон, как вам нравится
Edit2: Slaks прав. OrderBy не будет иметь никакого эффекта. Снова удалил