Sobes.tech
Back to questions
Junior — Middle
71

Какими способами можно устранить ограничение по ключам в структуре данных типа словарь?

Answer from AI

sobes.tech AI

В C# ключи в словаре (Dictionary<TKey, TValue>) должны быть уникальными и неизменяемыми для корректной работы хеширования. Чтобы устранить ограничения по ключам, можно использовать следующие подходы:

  1. Использовать составной ключ — создать класс или структуру, объединяющую несколько значений, и переопределить методы Equals и GetHashCode для корректного сравнения.

  2. Использовать коллекцию значений для одного ключа — например, Dictionary<TKey, List<TValue>>, чтобы хранить несколько значений под одним ключом.

  3. Использовать Lookup или IGrouping — если нужно сгруппировать данные по ключу.

  4. Использовать ConcurrentDictionary или другие специализированные коллекции, если нужна потокобезопасность.

  5. Использовать ImmutableDictionary — если нужна неизменяемая коллекция.

Пример составного ключа:

class CompositeKey
{
    public int Id { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj) => obj is CompositeKey other && Id == other.Id && Name == other.Name;
    public override int GetHashCode() => HashCode.Combine(Id, Name);
}

var dict = new Dictionary<CompositeKey, string>();
dict[new CompositeKey { Id = 1, Name = "A" }] = "Value1";