Sobes.tech
Junior — Middle

Kuidas vältida suuruse piirangut või piirangut võtme kasutamisel sõnastikus?

sobes.tech AI

Vastus AI-lt

C# keeles on sõnastikel (Dictionary<TKey, TValue>) piiranguid võtmetüüpidele ja nende suurusele, näiteks peab võti olema hash'itav ja õigesti rakendatud GetHashCode ning Equals meetodid.

Suuruse või tüübi piirangute vältimiseks võite:

  • Kasutada keerukaid võtmeid, näiteks luua klass või struktuur, mis ühendab mitu väärtust ning rakendada sellele õiged GetHashCode ja Equals meetodid.
  • Muuta suuremad või keerukamad võtmed kompaktsemateks esitlusteks, näiteks serialiseerides objekti stringiks või kasutades hash-funktsiooni.
  • Kasutada spetsialiseeritud kogusid või andmestruktuure, kui standardne sõnastik ei sobi.

Näide keerukast võtme struktuurist:

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";