Egy tömb elemeinek megszámolása, melyik elemből mennyi darab van, hogyan kell megoldani?
Nem értem, hogyan lehetne leprogramozni, illetve egyfajta magyarázatot szeretnék, mivel nincs aki elmagyarázza és én meg nem jövök rá .
(esetleg részletes magyarázat és egy kis példa)
(c# nyelv)
Mivel az érettségi feladatokat nézve, oldva nem csak egyszer előjött, hogy pl : hányszor fordulnak elő az elemek, tehát a tömbben lévő összes elemet (van közte azonos elem is ) végig nézem és egy másik tömb (int típusú) -nak növelem az i. elemtét, de hogy adja hozzá a megfelelő helyre hogy kiíratásnál jó eredményt adjon?
Rémélem érthető, lehet kicsit a vége értetlen de azért a lényeg kivehető, hogy mit is nem értek.
Egy olyan adatszerkezetet keress a darabszámok eltárolásához, ami egy kulcshoz egy értéket társít, pl:
"Ceruza" - 2
"Radír" - 15
"Füzet" - 7
"Toll" - 10
Erre több féle megoldás is létezik. Két egyszerűbb:
- Sortolod (sorba rendezed) az elemeket, majd megszámolod őket, értelemszerűen addig lépteted a számlálót, amíg az új elem megegyezik a korábban olvasottal.
- létrehozol egy szimpla adatszerkezetet, ami tartalmaz egy elemazonosítót és egy számlálót. Majd végigmész az adattömbön és ahol új elemet találsz, ott az adatszerkezetek listájába felveszed az elemet és a számlálóját 1-re állítod, ha nem létezik az aktuális (éppen viszgált) listaelem akkor létrehozod, ha már van, akkor a számlálóját inkrementálod (megnöveled eggyel).
Adott esetben a számláló hozzárendelése az első verziónál is szükséges lehet, csak kérdéses, hogy mi a végcél?
C# nyelvben az ilyen fajta feladatokat nagyon könnyen meg lehet oldani Linq segítségével.
pl.: van egy gyümölcsök neveit tartalmazó string tömb és meg akarjuk számolni, hogy melyik mennyiszer szerepel a tömbben.
linqval ez így néz ki:
var eredmeny = gyumolcsok.GroupBy(szo => szo).Select(g => new { Gyumolcs = g.Key, Darab = g.Count() });
foreach (var elem in eredmeny)
{
Console.WriteLine($"{elem.Gyumolcs}: {elem.Darab}");
}
GroupBy - csoportosítás a tömb elemei szerint
Select - lekérdezünk a csoportosításból
( .Key szavak, .Count() összeszámolja miből mennyi van )
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!