Hirdetés
- One mobilszolgáltatások
- Samsung Galaxy A57 - kecses test, lusta lélek
- Xiaomi 13 - felnőni nehéz
- Milyen okostelefont vegyek?
- Telekom mobilszolgáltatások
- Xiaomi 15T Pro - a téma nincs lezárva
- Poco X8 Pro Max - nem kell ide sem bank, sem akkubank
- A Redmi is hozott kompakt táblagépet
- Hivatalos a OnePlus Watch 4
- Samsung Galaxy S26 Ultra - fontossági sorrend
Aktív témák
-
pmonitor
aktív tag
A "Programozás topic"-ban elég vád ért engem. Ez sarkallt arra, hogy itt reagáljak rá(mivel ott nem tudok - a modi hatalmasabb nálam). Én továbbra is állítom, hogy az itt szereplő kódok jól működnek.
A moderátor ezt állította:kreal egy Point classt. szoval ez szep meg jo, csak koze nincs a Sethez.
Ezzel egy hibát követett el(de az fatális). Ugyanis van köze a Sethez. Nem is kevés. Csak annyi a lényeg, hogy mivel nem írtam át az
Equals()metódust, ezért a referenciákat veszi halmaznak. És természetesen azok egyenlőségét vizsgálja. Tehát nagyon is van köze a Sethez. Ha a Main() metódus elejét a következőkre módosítjuk, akkor ez megvilágítja, amiről eddig írtam:MyHashSet<Point> myPt = new MyHashSet<Point>();
Point pnt = new Point(20, 20);
Point pnt2 = pnt;
Point pnt3 = new Point(19, 20);
Point pnt4 = new Point(21, 20);
myPt.Add(pnt);
myPt.Add(pnt2);
myPt.Add(pnt3);
myPt.Add(pnt4);
Ennek a kimenete:Count = 3
20 19 21
Torlendo X érték: 20
Count = 2
19 21
Utolso elem = 21
Itt tökéletesen látszik, hogy az elején 4 helyett 3 különböző érték van csak: 20 19 21
Ez aPoint pnt2 = pnt;sor miatt van. Mivel ennek a kettőnek azonos a referenciája, ezért a kettőjük helyett csak az egyikük szerepel.De ha a Point osztálytba beletesszük az Equals() metódust, akkor így néz ki:
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (!(obj is Point))
{
return false;
}
return (this.X == ((Point)obj).X) && (this.Y == ((Point)obj).Y);
}
public override int GetHashCode()
{
return X.GetHashCode() ^ Y.GetHashCode();
}
és ha a pnt-ket így módosítjuk:Point pnt = new Point(20, 20);
Point pnt2 = new Point(15, 20);
Point pnt3 = new Point(20, 20);
Point pnt4 = new Point(21, 20);
akkor a kimenet:Count = 3
20 15 21
Torlendo X érték: 20
Count = 2
15 21
Utolso elem = 21
Az elején itt is csak 3 érték van. Mivel pnt és pnt3 egyenlő.
Tehát egyértelműen látszik, hogy a moderátor nem írt igazat azzal, hogy a Sethez köze sincs. De amiket itt írtam, azokra továbbra sincs válasz.
A mostani kód így néz ki:namespace TesztCsharp
{
class HashSets
{
public static void Main(string[] args)
{
MyHashSet<HsPoint> myHashSet = new MyHashSet<HsPoint>();
myHashSet.Add(new HsPoint(20, 20));
myHashSet.Add(new HsPoint(19, 20));
myHashSet.Add(new HsPoint(20, 20));
myHashSet.Add(new HsPoint(15, 20));
Console.WriteLine("Count = {0}", myHashSet.Count);
foreach (HsPoint pt in myHashSet)
{
Console.Write("{0} ", pt.X);
}
int i;
int torlendo = 20;
Console.WriteLine("\nTorlendo X érték: {0}", torlendo);
for (i = myHashSet.Count - 1; i >= 0; --i)
{
HsPoint pt = myHashSet[i];
if (pt.X == torlendo) myHashSet.Remove(pt);
}
Console.WriteLine("\n\nCount = {0}", myHashSet.Count);
foreach (HsPoint pt in myHashSet)
{
Console.Write("{0} ", pt.X);
}
if (myHashSet.Count > 0)
{
i = myHashSet[myHashSet.Count - 1].X;
Console.WriteLine("\nUtolso elem = {0}", i);
}
}
}
class MyHashSet<T> : HashSet<T>
{
List<T> myList = new List<T>();
public T this[int index]
{
get
{
return ((myList.Count > index) && (index >= 0)) ? myList[index] : throw new IndexOutOfRangeException();
}
}
public bool Add(T item)
{
if (base.Add(item))
{
myList.Add(item);
return true;
}
else return false;
}
public bool Remove(T item)
{
if (base.Remove(item))
{
myList.Remove(item);
return true;
}
else return false;
}
}
class HsPoint
{
public int X; public int Y;
public HsPoint(int x, int y)
{
X = x;
Y = y;
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (!(obj is HsPoint))
{
return false;
}
return (this.X == ((HsPoint)obj).X) && (this.Y == ((HsPoint)obj).Y);
}
public override int GetHashCode()
{
return X.GetHashCode() ^ Y.GetHashCode();
}
}
}De ebben már csak finomítások vannak.
Aktív témák
- Epson EB-FH06 projektor, CSAK 770 óra a lámpában! ÚJ ÁRA 250.000Ft-tól indul !
- WD Black SN850X 8TB M.2 NVME PCI-E 4.0 x4 - 1 év garancia - 7200-6600 MBs - Eladó!
- ASUS TUF F16 FX607 - 16"WUXGA 144Hz - Core 5 210H - 16GB - 512GB -Win11 - RTX 3050 - 1,5 év garancia
- 27% - NiPoGi MINI PC AMD Ryzen 5800U / 16GB DDR4 / 512GB NVMe
- Fehér Gamer Gép - GIGABYTE B860, Ultra 7 265KF, 16GB DDR4, RX 9060 XT 16GB, DDR5, 500GB SSD, 650W
- NVME, M2 NGFF, 2,5" SATA SSD-k vegyes OEM márkák és prémium típusok, sok újszerű. 256GB-1TB
- iPhone 14 Pro Max 256GB 100% (1év Garancia)
- HIBÁTLAN iPhone 15 Pro 128GB Natural Titanium -1 ÉV GARANCIA - Kártyafüggetlen, MS4384
- 0perces DDR5 5600 vadiúj 2x16GB memória 1 év garancia
- AKCIÓ! MacBook Pro 13 M1 8GB RAM 512GB SSD notebook garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

