.NET SortedDictionary, но отсортированный по значениям - PullRequest
5 голосов
/ 12 апреля 2010

Мне нужна структура данных, которая действует как SortedDictionary<int, double>, но сортируется по значениям, а не по ключам. Мне нужно около 1-2 микросекунд для добавления и удаления элементов, когда в словаре около 3000 элементов.

Моей первой мыслью было просто переключить ключи и значения в моем коде. Это почти работает. Делая это, я могу добавлять и удалять элементы примерно за 1,2 микросекунды в моем тестировании.

Но ключи должны быть уникальными в SortedDictionary, что означает, что значения в моем обратном словаре должны быть уникальными. И в некоторых случаях их может не быть.

Есть ли какие-нибудь идеи о том, что уже есть в библиотеках .NET, которые будут работать для меня?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010

Вы можете отсортировать SortedDictionary по значению, как это:

yourList.Sort(
    delegate(KeyValuePair<int, double> val1,
    KeyValuePair<int, double> val2)
    {
        return val1.Value.CompareTo(val2.Value);
    }
);
1 голос
/ 12 апреля 2010

Библиотека PowerCollections имеет класс OrderedMultiDictionary<TKey, TValue>, который в основном похож на SortedDictionary<TKey, TValue>, но допускает дублирование. Когда вы ищете ключ, вы получаете перечисляемое значение вместо единственного значения.

Библиотека бесплатна, и вы должны иметь возможность делать с этим классом именно то, что вам нужно - сохранять значения в качестве ключей.

...