- EarFun Air Pro 4 - a cél a csúcs
- Fotók, videók mobillal
- A hagyományos (nem okos-) telefonok jelene és jövője
- Xiaomi 15 - kicsi telefon nagy energiával
- Xiaomi Watch 2 Pro - oké, Google, itt vagyunk mi is
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Motorola Moto G54 5G Power Edition - nem merül le
- Samsung Galaxy A56 - megbízható középszerűség
- Apple Watch
- Motorola Razr 60 Ultra - ez a kagyló könnyen megfő
Aktív témák
-
pmonitor
aktív tag
Egyébként meg pl. az 1D vágás(hátizsák probléma azonos hátizsákkal) esetében nem is készülne egyetlen program sem, mert az optimális megoldást úgy sem találja meg a legtöbb esetben. Ha az axioma alapján indulunk el. De a gyakorlat azt mutatja, hogy készülnek ilyen programok, és még némelyik nem kevés lóvét is kér érte. Tehát az ezt készítő programozók nem az axiomát követik. Pedig ott szinte zéró a valószínűsége, hogy az optimális esetet megtalálják...
-
pmonitor
aktív tag
Ha írsz bármilyen algoritmust, akkor annak a kódja nem változik meg a program futása közben. A kód(algoritmus) ugyanaz marad. A ToString metódus kódja fix. Az nem változik meg attól, hogy 1 iterációban van.
De ha vki nem hisz nekem, akkor egyetlen megoldása marad:
foreach-el végig iterál az elemeken. Az iteráción belül kigyűjti a törlendő elemeket(pl. egy listába), és a foreach után még egyszer végigiterál a kigyűjtött elemeken. És így törli egyesével azokat.
Ha vki hisz nekem, akkor meg úgy csinálja, ahogy mutattam. -
pmonitor
aktív tag
Értem, hogy mi a gondolatmeneted, csak nem értek vele egyet. Egyébként amikor a hashset-ből listát csinál, akkor az történik, hogy pár byte-ot a hashset ELÉ tesz. Az nem változtatja meg az elemek sorrendjét. A hashset teljes hosszában változatlan marad. Nem random módon működik a ToList() metódus. Annak a kódja(algoritmusa) nem változik.
-
pmonitor
aktív tag
Az, hogy jön a GC, az csak a memóriát rendezi át(Átmásolja "A" memóriacímről "B"-be a megadott hosszt). Ez nem változtatja meg az elemek sorrendjét. Na látod ilyenért célszerű lemenni asm-be.
Vagy valaki egy másik CLR-en futtatja a kódodat.
for ciklus közben azt nehéz lenne...
-
pmonitor
aktív tag
Adott a következő kód:
MyHashSet<Point> myPt = new MyHashSet<Point>();
myPt.Add(new Point(10, 20));
myPt.Add(new Point(15, 20));
myPt.Add(new Point(20, 20));
myPt.Add(new Point(20, 20));
Console.WriteLine(myPt.Count);
int i;
for (i = myPt.Count - 1; i >= 0; --i)
{
if (myPt[i].X == 20) myPt.Remove(myPt[i]);
}
Console.WriteLine(myPt.Count);
i = myPt[myPt.Count - 1].X;
Console.WriteLine(i);
public class MyHashSet<T> : HashSet<T>
{
public T this[int index]
{
get
{
List<T> list = new List<T>(this);
return list.Count > index ? list[index] : throw new Exception();
}
}
}
public class Point
{
public int X; public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}A kimenet:
4
2
15Sztem tök jól működik. Az összes olyan myPt-t törölte, ahol X ==20. 2 darab ilyen volt. Látszik, hogy a hossz 4-ről 2-re változott.
-
pmonitor
aktív tag
Azt csinálja, hogy végig iterál a T típusok példányain a végétől az elejéig. Ha ez a T típus 1 osztály lenne, akkor megnézné, hogy pl. point.X értékei egyeznek-e egy bizonyos értékkel, akkor a feltételnek megfelelő point-okat törölné a myHashSet-ből.
#64.
mert a Set nem garantál semmilyen sorrendet.
.Ilyen alapon a foreach sem kellene, mert az sem garantál bizonyos sorrendet. Akkor az nem felesleges?
#69
Gondold végig, hogy vajon ez a for ciklus mindig garantáltan fel fogja-e dolgozni a hashSet-et összes elemét?
Igen. -
cucka
addikt
Most jó hangulatban vagyok, szóval itt egy feladat, amiből tanulhatsz valamit.
Adott pár hsz előtt az indexelő megoldásod. És adott ez a for ciklus amit írtál.
Gondold végig, hogy vajon ez a for ciklus mindig garantáltan fel fogja-e dolgozni a hashSet-et összes elemét?
A választ erre már megírtam itt, csak össze kell raknod fejben.
-
pmonitor
aktív tag
Csináld meg pl. ezt foreach-el.
int i;
for (i = myHs.Count - 1; i >= 0; --i)
{
if (myHs[i] == 102) myHs.Remove(i);
}
i = myHs[myHs.Count - 1];
Console.WriteLine(i);Mondjuk ez nem olyan látványos. De amikor osztály példányokkal dolgozol(amelyiknek vmelyik. adattagját/mezőjét kell ellenőrizni, akkor már jobban előjön ennek az előnye. Persze a negatív indexeket is jó lenne ellenőrizni...
-
pmonitor
aktív tag
Köszönöm, hogy leírtad a véleményed. Viszont azután sem értek egyet veled, hogy többször is elolvastam, amit írtál, és nagyjából értem is az álláspontod. Az unsafe kódban valójában 1 konstans(pontosabban read only) memóriát módosítok. A string literál címe akkor jön létre, amikor betölti a .exe file-t a memóriába, és onnantól kezdve fix memóriacímen van. Ha asm kódban debuggoljuk, akkor a címe ez:
string s = "asdfg";
00C0087D mov eax,dword ptr ds:[3D3242Ch]De a 3D3242Ch címen csak referencia van(0x02D322F0). Ahová az mutat, ott van a string:
0x02D322F0 dc ab c9 6f 05 00 00 00 61 00 73 00 64 00 66 00 67 00
Tehát a referencia alacsony szinten egy mutató. Magas szinten referenciának keresztelték el. Mert C#-ban a mutató kifejezés már foglalt. C#-ban a mutató az, amit unsafe kódban lehet használni.
Ezek miatt nem értek veled egyet. -
cucka
addikt
Még egy nem annyira apróság, ami kimaradt.
Amit írtam, az ott érvényes, ahol a string mutable.
Java-ban (meg talán c#-ban is) a string immutable.
Immutable esetben értelmét veszti a copy on write technika, mert ugye nincs write.
A stringjeidet immutable értékként kezeled oszt jónapot.
Aktív témák
Hirdetés
- Autós topik
- EAFC 25
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- EarFun Air Pro 4 - a cél a csúcs
- AMD vs. INTEL vs. NVIDIA
- Milyen videókártyát?
- Kerékpárosok, bringások ide!
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- SSD kibeszélő
- További aktív témák...
- Lenovo Yoga Pro 9 (16IMH9) - Intel Core Ultra 9 185H, RTX 4060, 32GB, érintős ELKELT
- Lenovo Thinkpad P16 G2 - i9-13980HX, 64GB, 1TB SSD, 16" WQUXGA (3840 2400), RTX 4090 (ELKELT)
- Több mint 70.000 eladott szoftverlicenc
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Telefon felvásárlás!! Samsung Galaxy S21/Samsung Galaxy S21+/Samsung Galaxy S21 Ultra
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged