Как найти повторяющийся ключ в списке KeyValuePair и удалить более раннее значение ключа

Я использую список KeyValuePair для хранения некоторой информации из входящего сообщения.

List<KeyValuePair<int, string>> qInfoTempList = new List<KeyValuePair<int, string>>();

qInfoTempList.Add(new KeyValuePair<int, string>(eventInfo.ReferenceId, eventInfo.StringValue));

Как только сообщения поступают, идентификатор ссылки сообщения сохраняется как ключ, а выбранное значение сообщения сохраняется как значение в списке. Как на месте обнаружить дубликат ключа и удалить из списка более ранний?

В этом случае лучше использовать Dictionary вместо List?


person YWah    schedule 27.08.2015    source источник
comment
Если вы всегда хотите удалить предыдущую запись, то да, лучше использовать Словарь, чем Список.   -  person Silas Reinagel    schedule 27.08.2015
comment
ИМХО Dictionary<,> здесь будет очевидной структурой данных, она делает именно то, что вы ищете.   -  person stakx - no longer contributing    schedule 27.08.2015
comment
@Thorarins В этом случае ему не нужно искать в списке. Создание сопоставления будет намного проще и быстрее.   -  person Yuval Itzchakov    schedule 27.08.2015


Ответы (1)


Если вам не нужны дубликаты, вы можете использовать Dictionary<TKey, TValue> и проверить, существует ли ключ, используя ContainsKey:

var infoById = new Dictionary<int, string>();
if (infoById.ContainsKey(someId))
{
    // Do override logic here
}

Или, если вам не нужен предыдущий элемент, вы можете просто заменить его:

infoById[someId] = value;
person Yuval Itzchakov    schedule 27.08.2015
comment
Привет @YuvalItzchakov, спасибо за быстрый ответ. Итак, если я использую словарь, будет ли размер словаря увеличиваться при поступлении сообщений? Ключ будет продублирован после первого запуска, и новый ключ не будет создан. - person YWah; 27.08.2015
comment
@YWah Да, он будет динамически изменяться при вставке записей. - person Yuval Itzchakov; 27.08.2015