eparthibanmca Ответов: 2

Получить максимальное значение в словаре на основе значения ключа


Получить максимальное значение на основе ключа
Словарь <string long=""> Тест
тест может содержать
{
 { "val1",10},
{ "val2",20},
{"val1",50},
{val3,100}
{val1,150}
}


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

я использую Макс я не могу получить ключ

д. Ключи.Макс()

var fooDict = новый словарь<string,>();
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Ключ;
var biggestInt = fooDict[keyForBiggest];

PIEBALDconsult

Это не то, как пользоваться словарем. Вам понадобится другая структура, если вам нужно будет делать это часто.

BulletVictim

пробовать:
Объявить переменную x = 0;
для каждого свой словарь.
проверьте, не больше ли это значение x.
если больше x, установите x = значение.

Matt T Heffron

То, что вы показали, помимо того, что не компилируется (два ключа не являются строками), он также потерпит неудачу во время выполнения, так как вы пытаетесь иметь три записи с одним и тем же ключом "val1". Это недопустимо. Словарь требует, чтобы все ключи были уникальными.
Вам, вероятно, нужно что-то вроде Dictionary<string, List<long>>

2 Ответов

Рейтинг:
2

Manas_Kumar

Попробуйте ниже код:

Dictionary<string, int> locations = new Dictionary<string, int>()
{
   { "test1", 4},
   { "test3", 9},
   { "test2", 1},
   { "test5", 2},
   { "test9", 3}
};

// To get max value in dictionary
int maxValue = locations.Max(); //9

// To get max value key name in dictionary
var guidForMaxDate = locations.FirstOrDefault(x => x.Value == locations.Values.Max()).Key; //test3


Рейтинг:
0

Maciej Los

Прежде всего, а test словарь может НЕ содержит такие значения:

{"val1",10},
{"val2",20},
{"val1",50},
{"val3",100}
{"val1",150}

потому что val1 уже существует!

Вы должны привязать свой объект словаря к этому определению:
Dictionary <int, string> test = new Dictionary<int, string>()
		{
			{10, "val1"},
			{20, "val2"},
			{50, "val1"},
			{100, "val3"},
			{150, "val1"}
		};

Приведенный выше код создаст объект словаря следующим образом:
Key Value
10  val1 
20  val2 
50  val1 
100 val3 
150 val1 


Если вы хотите вернуть max Для значения, равного "val1", вы можете использовать Linq:
var maxKeyOnValue = test.Where(c=>c.Value.Equals("val1")).Select(x=>x.Key).Max();
//returns 150


Другая идея заключается в использовании Словаре sorteddictionary[^].