Столкнулся с одной проблемой. Есть свойство (коллекция) Dictionary<String, MyClass> MyDic
и периодически запускается метод AddValues(), который добавляет в нее элементы. Самый первый раз элементы добавляются по порядку, но последующие разы - добавляются в самое начало. У меня два вопроса - почему не добавляются элементы в конец коллекции и можно ли как-то решить эту проблему?
Элементы не добавляются в конец, потому что класс Dictionary<TKey, TValue>
реализован как хэш-таблица. Порядок элементов в хэш-таблице может быть произвольным.
Чтобы управлять порядком элементов, используйте класс SordtedDictionary<TKey, TValue>
. Он реализован на базе сбалансированного двоичного дерева.
Имейте в виде, что операции вставки, удаления и поиска элемента по ключу в двоичном дереве имеют сложность O(log N) против O(1) у хэш-таблицы.
Пример как скрестить 2 коллекции
public class MyAwesomeCollection<TK, TV> : IEnumerable<KeyValuePair<TK, TV>>
{
private List<TK> _listItems = new List<TK>();
private Dictionary<TK, TV> _dictItems = new Dictionary<TK, TV>();
public IEnumerator<KeyValuePair<TK, TV>> GetEnumerator()
{
return _listItems.Select(x=> new KeyValuePair<TK, TV>(x,_dictItems[x])).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public void AddToEnd(TK key, TV value)
{
if (_dictItems.ContainsKey(key))
{
_dictItems[key] = value;
_listItems.Remove(key);
_listItems.Add(key);
}
else
{ _dictItems[key] = value;
_listItems.Add(key);
}
}
public void CLear()
{
_dictItems.Clear();
_listItems.Clear();
}
}
Как использовать
var coll = new MyAwesomeCollection<int,int>();
for(int i = 0; i<10; i++)
{
coll.AddToEnd(i, i+i);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть два объекта, рисуемые на форме (на пример, круг и треугольник) и необходимо при движение (движение происходит при нажатии стрелок на клавиатуре)...
Всем доброго дня! Сразу суть вопроса - запрос в коде не отрабатывается верно - не приходят данные, проблема только с полем WWG_NAME, остальные...
В автотесте Есть адрес: https://flowtimeqapnmsoftlabs