Using .ToDictionary()

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 !

45
задан Carl Manaster 31 August 2010 в 16:41
поделиться

4 ответа

Обычный словарь не отсортирован, но вы можете использовать SortedDictonary:

var sortedDict = new SortedDictionary<string, int>(
    GetSomeStrings().ToDictionary(x => x, y => y.Number('A')));

Этот оператор должен дать вам SortedDictionary, отсортированный по строковому ключу.

8
ответ дан 26 November 2019 в 21:05
поделиться

Чтобы создать свой словарь, вы можете сделать следующее:

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);
3
ответ дан 26 November 2019 в 21:05
поделиться

Вам нужно использовать перегруженную версию ToDictionary, которая принимает две функции:

 var myDic = GetSomeStrings().ToDictionnary(x => x, x => x.Number('A'));

Обе функции принимают любой объект, который вы используете для создания словаря. Первый производит Ключ; второй, Ценность.

1
ответ дан 26 November 2019 в 21:05
поделиться
var myDic = GetSomeStrings()
    .ToDictionary(x => x, x => x.Number('A'));

Получение словаря нужным вам способом.

Редактировать: Добавлен порядок. Сначала упорядочивает строки, затем помещает их в диктофон, как вам нравится

Edit2: Slaks прав. OrderBy не будет иметь никакого эффекта. Снова удалил

1
ответ дан 26 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: