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()irGetHashCode(), arba įgyvendinamasIEquatable<T>sąsaja. - Kolekcijoms galima naudoti
System.Linqmetodus, pvz.,SequenceEqualsekcijoms.
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