вся история;У меня есть несколько KeyValuePairs, которые мне нужно сохранить в сеансе, и моя основная цель - сохранить их маленькими.Поэтому у меня нет возможности использовать много разных коллекций.Хотя ключ является другим значением перечисления другого типа перечисления, значение всегда является просто значением перечисления того же типа перечисления.Я выбрал HashTable для этого подхода, содержимое которого выглядит следующим образом (только много больше):
// The Key-Value-Pairs
{ EnumTypA.ValueA1, MyEnum.ValueA },
{ EnumTypB.ValueB1, MyEnum.ValueB },
{ EnumTypC.ValueC1, MyEnum.ValueA },
{ EnumTypA.ValueA2, MyEnum.ValueC },
{ EnumTypB.ValueB1, MyEnum.ValueC }
Максимум, что я использую, содержит в этом HashTable, но наверняка мне также нужно получить значение в какой-то моменти мне нужно перебрать все элементы.Это все работает нормально, но теперь у меня есть новое требование, чтобы сохранить порядок, я добавил их в HashTable -> BANG
HashTable это карта, и это невозможно!
Теперь я подумал об использовании SortedList<object, MyEnum>
или использовании большего количества данных, но с более быстрым поиском и использовании SortedSet<object>
в дополнение к HashTable.
Содержание ниже было отредактировано
SortedList реализован как
SortedList<Enum, MyEnum> mySortedList = new SortedList<Enum, MyEnum>();
SortedSet реализован как
SortedSet<Enum> mySortedSet = new SortedSet<Enum>();
Описанный ключ - значение - пары добавляются в отсортированный список с помощью
void AddPair(Enum key, MyEnum value)
{
mySortedList.Add(key, value);
}
И для SortedSett, подобного этому
void AddPair(Enum key)
{
mySortedSet.Add(key);
}
Обе сбои, за исключением:
Объект должен быть того же типа, что и перечисление
Мой вопрос: Что идет не так и какя могу заархивировать свою цель?
Используемое решение
Я решил жить с недостатком избыточных данныхпротив медленных поисков и решил реализовать List<Enum>
, который сохранит порядок вставки параллельно моему уже существующему HashTable.
В моем случае у меня просто есть около 50-150 элементов, поэтому я решил сравнитьHashtable
против List<KeyValuePair<object,object>>
Поэтому я создал себе следующего помощника для реализации ContainsKey()
вList<KeyValuePair<object,object>>
static bool ContainsKey(this List<KeyValuePair<object, object>> list, object key)
{
foreach (KeyValuePair<object, object> p in list)
{
if (p.Key.Equals(key))
return true;
}
return false;
}
Я вставил те же 100 записей и проверил случайным образом одну из десяти различных записей в цикле 300000.И ... разница была крошечной, поэтому я решил пойти с List<KeyValuePair<object,object>>