gacar Ответов: 1

Добавить значение счетчика в словарь значение


У меня есть словарь
Dim Dic as dictionary(integer, integer) 
123, 3
345, 21
22, 0
56, 1

Я ДВС отсортированный по значениям
Dim DicSort As List(Of KeyValuePair(Of integer, Integer)) = Dic.ToList 

DicSort.Sort(Function(x, y) y.Value.CompareTo(x.Value))
22, 0
25, 1
123, 3
345, 21

Я хочу удалить значения Dic и поставить номер индекса (или текущее количество Dic во время выполнения)
Вроде как это,
22, 0
25, 1
123, 2
345, 3

Что я уже пробовал:

Dim OrderDic = Dic.ToDictionary(Function(x) x.Key, Function(y)  Dic.Values.Count)

Но у меня есть такой результат,
22, 4
25, 4
123, 4
345, 4

Richard MacCutchan

Dic.Values.Count это постоянное число, и всегда будет 4 в этом случае. Вам нужен какой-то пункт, который дает позицию в словаре.

1 Ответов

Рейтинг:
5

Maciej Los

Проверить это:

Dim oDict As Dictionary(Of Integer, Integer) = New Dictionary(Of Integer, Integer)
oDict.Add(123, 3)
oDict.Add(345, 21)
oDict.Add(22, 0)
oDict.Add(56, 1)


'sort by key and
'replace values with index of sorted element
oDict = oDict _
	.OrderBy(Function(x) x.Key)	_
	.Select(Function(x, i) New KeyValuePair(Of Integer, Integer)(x.Key, i)) _
	.ToDictionary(Function(kvp) kvp.Key, Function(kvp) kvp.Value) 


Удачи вам!


gacar

Спасибо Вам большое Мацей Лос, поработали.

Maciej Los

Отлично! Всегда пожалуйста.

Richard Deeming

Тебе это не нужно .ToList() позвони туда. :)

Maciej Los

Хорошая мысль!
Обновлено!