Мне нужна структура данных, которая действует как a SortedDictionary<int, double>
но отсортирован на основе значений, а не ключей. Мне нужен он для взятия приблизительно 1-2 микросекунд, чтобы добавить и удалить объекты, когда у нас есть приблизительно 3 000 объектов в словаре.
Моя первая мысль состояла в том, чтобы просто переключить ключи и значения в моем коде. Это очень почти работает. Я могу добавить и удалить элементы приблизительно через 1,2 микросекунды в моем тестировании путем выполнения этого.
Но ключи должны быть уникальными в SortedDictionary так, чтобы средство, которое оценивает в моем обратном словаре, должно было бы быть уникальным. И существуют некоторые случаи, где они не могут быть.
Какие-либо идеи чего-то в библиотеках.NET уже, которые работали бы на меня?
В библиотеке PowerCollections есть класс под названием OrderedMultiDictionary
, который в основном похож на SortedDictionary
, но допускает дублирование. Когда вы ищите ключ, вы получаете перечислимое вместо одного значения.
Библиотека бесплатна, и вы должны иметь возможность делать с этим классом именно то, что хотите - сохранять значения как ключи.
Вы можете отсортировать SortedDictionary по значению следующим образом:
yourList.Sort(
delegate(KeyValuePair<int, double> val1,
KeyValuePair<int, double> val2)
{
return val1.Value.CompareTo(val2.Value);
}
);