Sobes.tech
Junior — Middle

Hogyan lehet elkerülni a méretkorlátozást vagy a kulcs használatával kapcsolatos korlátozásokat egy szótárban?

sobes.tech MI

Válasz az MI-től

C#-ban a szótárak (Dictionary<TKey, TValue>) kulcs típusokra és azok méretére vonatkozó korlátozásokkal rendelkeznek, például a kulcs hash-elhető kell legyen, és helyesen kell implementálni a GetHashCode és Equals metódusokat.

A méret vagy típus korlátozások elkerülése érdekében:

  • Használhat összetett kulcsokat, például létrehozhat egy osztályt vagy struktúrát, amely több értéket egyesít, és helyesen implementálja a GetHashCode és Equals metódusokat.
  • Nagy vagy összetett kulcsokat kompaktabb reprezentációkra alakíthat át, például az objektumot sorosíthatja sztringgé vagy hash függvényt használhat.
  • Speciális kollekciókat vagy adatstruktúrákat használhat, ha a standard szótár nem megfelelő.

Összetett kulcs példája:

struct CompositeKey
{
    public int Id;
    public string Name;

    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 = "Test" }] = "Value";