Sobes.tech
Junior — Middle

Kaip vykdomas skirtingų duomenų struktūrų palyginimas?

sobes.tech AI

Atsakymas iš AI

C# kalboje duomenų struktūrų palyginimas priklauso nuo duomenų tipo ir kaip įgyvendintas palyginimas:

  • Pirmojo tipo (int, double, bool ir kt.) lyginami pagal reikšmę.
  • Struktūros (struct) pagal numatytuosius nustatymus lyginamos pagal reikšmę — visi laukai lyginami seka.
  • Klasės (class) lyginamos pagal nuorodą, tai yra, tikrinama, ar kintamieji nurodo į tą patį objektą.
  • Klasės turinio palyginimui dažnai perrašomi metodai Equals() ir GetHashCode(), arba įgyvendinamas IEquatable<T> sąsaja.
  • Kolekcijoms galima naudoti System.Linq metodus, pvz., SequenceEqual sekcijoms.

Pavyzdys dviejų struktūrų ir klasių palyginimo:

struct PointStruct
{
    public int X, Y;
}

class PointClass
{
    public int X, Y;
    public override bool Equals(object obj)
    {
        if (obj is PointClass other)
            return X == other.X && Y == other.Y;
        return false;
    }
    public override int GetHashCode() => (X, Y).GetHashCode();
}

var a = new PointStruct { X = 1, Y = 2 };
var b = new PointStruct { X = 1, Y = 2 };
Console.WriteLine(a.Equals(b)); // Teisinga - pagal reikšmę

var c = new PointClass { X = 1, Y = 2 };
var d = new PointClass { X = 1, Y = 2 };
Console.WriteLine(c.Equals(d)); // Teisinga - dėl perrašymo
Console.WriteLine(ReferenceEquals(c, d)); // Netiesa - skirtingi objektai