Страница 1 из 1

SortedDictionary или сортированные значения [РЕШЕНО]

СообщениеДобавлено: 01 июл 2017, 18:12
greatPretender
Вечер бодрый. Подскажите, пожалуйста, нужен что-то типо сортированный словарь.
Т.е.
ДАНО:
словарь dict <int, int> = <<21, 128>, <32, 72>, <31, 206>, <11, 107>, <43, 292>>
в нём ключи никогда не повторяются, а значения могут совпадать.

НУЖНО: отсортировать Ключи по мере возрастания Значений.
Т.е. сортируем значения по возрастанию и получаем упорядоченную последовательность ключей в соотв-ии с так раставленными значениями.
Т.е. должно получиться так:
словарь dict <int, int> = <<32, 72>, <11, 107>, <21, 128>, <31, 206>, <43, 292>>
Просто нужно найти не ОДИН ключ с наименьшим значением, а иметь список ключей по возрастанию значений, чтобы ко всем ключам потом обращаться.
Думал SortedDict , но понять не могу, как мне из него получить первый ключ в результате этой сортировки, а потом последующий и т.д. К нему разве можно обращаться как к списку, т.е. получить 1-ый элемент(взять только ключ, значение не надо), 2-ой и т.д.?
Сортировать отдельно List из значений - НЕ вариант, т.к. если значения совпадут у разных ключей, то я не смогу потом понять идент-ть ключ по таким значениям.

Re: SortedDictionary или сортированные значения

СообщениеДобавлено: 01 июл 2017, 18:35
samana
greatPretender писал(а):НУЖНО: отсортировать Ключи по мере возрастания Значений.

Синтаксис:
Используется csharp
using System.Linq;
dic = dic.OrderBy(x => x.Value).ToDictionary(x => x.Key, y => y.Value);

Re: SortedDictionary или сортированные значения

СообщениеДобавлено: 01 июл 2017, 18:38
greatPretender
И как теперь получить ключ с наименьшим значением, и следующий ключ со "вторым" наименьшим и так далее?

Re: SortedDictionary или сортированные значения

СообщениеДобавлено: 01 июл 2017, 18:49
samana
Просто пробежать foreach-ем и получите значения от начала до конца.

Re: SortedDictionary или сортированные значения

СообщениеДобавлено: 01 июл 2017, 18:53
greatPretender
Буду пробовать. Ок, Спасибо.)

Re: SortedDictionary или сортированные значения

СообщениеДобавлено: 07 июл 2017, 11:35
greatPretender
samana писал(а):Просто пробежать foreach-ем и получите значения от начала до конца.

Сейчас пробую, но через foreach что-то не получается. Не понятно как в коде понимать 2-ое, 3-ее или какое я перебираю значение в рез-те сортирвки.
Я пробую через for перебирать. Пара вопросов есть, проверить в дебаге пока не могу , а в документации типо prof...web слишком абстрактно написано.
Обращаться нужно с i=0 или =1?
А если через for , то в результате этой сортировки первое запрошенное значение будет минимальным? А второе тогда следующее по возрастанию?

Re: SortedDictionary или сортированные значения [РЕШЕНО]

СообщениеДобавлено: 07 июл 2017, 12:00
samana
У обычного словаря нет индексов, поэтому цикл for здесь бесполезен, либо я не знаю как это сделать через for.

greatPretender писал(а):Сейчас пробую, но через foreach что-то не получается. Не понятно как в коде понимать 2-ое, 3-ее или какое я перебираю значение в рез-те сортирвки.

Просто после сортировки, когда вы запускаете foreach он переберёт все элементы от начала до конца, но так как эти элементы были упорядочены по возрастанию значения, то ваш перебор и будет от меньшего (Value) до большего.

Немного не понимаю, зачем вам индекс в словаре? Может вам не ограничиваться только словарём, но и создать дополнительные массивы, которые будут хранить отдельно ключи и значения из этого словаря?

Re: SortedDictionary или сортированные значения [РЕШЕНО]

СообщениеДобавлено: 07 июл 2017, 20:24
greatPretender
samana писал(а):У обычного словаря нет индексов, поэтому цикл for здесь бесполезен, либо я не знаю как это сделать через for.

Просто после сортировки, когда вы запускаете foreach он переберёт все элементы от начала до конца, но так как эти элементы были упорядочены по возрастанию значения, то ваш перебор и будет от меньшего (Value) до большего.

Ааа, вот это мне и нужно, а именно, что после сортировки , в цикле foreach уже начинает перебор с наименьшего значения. Я для этого и дмал как бы ввезти индексацию, т.к. по ключам я не могу ориентировать, поскольку в цикле foreach мне и нужно узнать сначала ключ самого наименьшего значения, потом ключ следующего значения по возрастанию, и т.д. Ладна индексацию я внутри foreach-а введу искусственно. Для меня главный вывод этот: "...что после сортировки , в цикле foreach уже начинает перебор с наименьшего значения. ...", а остальное я сделаю. Спасибо.)