Lista
A lista használatához ne felejtsük el: Using.System.Collections.Generic
A lista olyan tömb gyakorlatilag, aminek változhat az elemszáma. A tömbökhöz képest annyi a különbség, hogy dinamikusan foglal memóriát, csak annyit, amennyi elemet tárol. A lista index-érték párokból áll. A lista elemeire az index vagy az érték segítségével hivatkozhatunk.
List<típus> listaneve = new List<típus>();
Műveletek listákon:
- Egy listaelem hozzáadása: listaneve.Add(elem)
- Listaelem törlése: listaneve.Remove(elem)
- Adott indexű elem törlése: listaneve.RemoveAt(elemindexe)
- Több elem hozzáadása a lista végéhez: AddRange(elemek)
- Elem sorszáma: listaneve.IndexOf(elemindexe) Használható keresésre.
- LastIndexOf
- Lista ürítése: listaneve.Clear()
- Sorba rendezés: Sort()
- Fordított sorrend: Reverse() Ez nem rendez, csak fordított sorrend!
- Egyezőség vizsgálata: Contains(elem)
- Elemek száma: lista.Count
- Lista kapacitása: lista.Capacity
- Felesleges foglalás csökkentése: lista.TrimExcess()
List<double> szamok = new List<double>(); //lista létrehozása
szamok.Add(82); //elem hozzáadása
A lista elemszámát a Count tulajdonságával kérdezhetjük le (vektorok esetén a Length-t kellett használni). Ez általában is jellemző – aminek a mérete nem változik a futási idő alatt, annak Length-e van, aminek a mérete dinamikus, annak Count-ja. A lista elemeinek indexe [0,Count-1] közöttiek. Ha a lista üres (kezdetben, Count=0), akkor nincs 0-s sorszámú eleme sem. A lista i. elemét hasonló szintaktikával lehet elérni, mint vektorok esetén. A lista változó után szögletes zárójelben kell megadni az elem sorszámát.
1 2 |
double b = szamok[0] + szamok[1]; Console.WriteLine("A neve={0}", nevek[0]); |
A lista nem konstansokat tartalmaz, a listaelemek nem csak kiolvashatóak, hanem módosíthatóak is (mint a vektorok esetén).
1 2 |
szamok[0] = 14.3; szamok[1] = szamok[0]*2; |
Példa: Kérjünk be elemeket a listánkra, meghatározott jelig. Pl: 0 leütéséig. Írassuk ki a listánk elemeit, majd az elemek összegét! Töröljünk ki egy adott elemet, majd írassuk ki újra hány elemből áll a lista!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
List<int> listank = new List<int>(); //lista létrehozása // Console.Write("Írd be a spec értéket:"); int vegeErtek = int.Parse(Console.ReadLine()); // while (true) { Console.Write("Kérem a köv. értéket:"); int x = int.Parse(Console.ReadLine()); if (x == vegeErtek) break; else listank.Add(x); } //itt jön a listaelemek kiírása for (int i = 0; i < listank.Count; i++) { Console.WriteLine(listank[i]); } int sum = 0; //a sum változó tárolja majd az elemek összegét //végigmegyünk a lista elemein, és mindig hozzáadjuk az adott elem értékét sum-hoz for (int i = 0; i < listank.Count; i++) { sum = sum + listank[i]; } Console.WriteLine("Az összeg = {0}", sum); Console.WriteLine("A lista elemeinek száma:{0}", listank.Count); Console.WriteLine("Hányadik sorszámú elemet töröljük?"); int torolni = Convert.ToInt32(Console.ReadLine()); listank.RemoveAt(torolni); Console.WriteLine("A lista elemeinek száma:{0}", listank.Count); |
Példa 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using System; using System.Collections.Generic; namespace listaism { class Program { static void Main(string[] args) { Console.WriteLine("Lista használat ismétlés..."); Random vsz = new Random(); //lista létrehozása List<int> lista = new List<int>(); //lista feltöltése lista.Add, elemek kiíratása for (int i=0; i<10; i++) { lista.Add(vsz.Next(20)); Console.Write("{0} ",lista[i]); } //hány elemű a lista? lista.Count Console.WriteLine("Lista elemszáma: {0}",lista.Count); //adott elem lekérdezése Console.WriteLine("Melyik elem indexét keressük?"); int melyik = Convert.ToInt32(Console.ReadLine()); if (lista.IndexOf(melyik) > 0) Console.WriteLine("A keresett elem indexe: {0}", lista.IndexOf(melyik)); else Console.WriteLine("Nincs ilyen értékű elem!"); //adott indexű elem törlése lista.RemoveAt(index); Console.WriteLine("Hanyadik elemet töröljük?"); int torlendo = Convert.ToInt32(Console.ReadLine()); lista.RemoveAt(torlendo); //lista elemek kiíratása for (int i=0; i<lista.Count; i++) { Console.Write("{0} ",lista[i]); } //lista elem törlése érték szerint lista.Remove(); Console.WriteLine("Milyen értékű elemet töröljek?"); int mit = Convert.ToInt32(Console.ReadLine()); lista.Remove(mit); //lista elemek kiíratása for (int i = 0; i < lista.Count; i++) { Console.Write("{0} ", lista[i]); } //lista törlése: lista.Clear(); lista.Clear(); } } } |
Array list
Jellemzői
• Dinamikus elemszámú tömbök kezelését valósítja meg az ArrayList osztály.
• Eltérő típusok is lehetnek egyben: szöveg, karakter, logikai, szám
Névtér hozzáadása: using System.Collections;
• Az elemek ugyanúgy elérhetők index-szel, mint egy tömbnél.
• Deklarálása: ArrayList listaneve= new ArrayList();
• Capacity: a tartalmazható elemek számát írhatjuk ki.
• Count: a tényleges elemek számát olvashatjuk ki.
• Item: Lekéri vagy beállítja az elemet a megadott indexre
Az ArrayList főbb metódusai
• Add: Hozzáad egy objektumot a lista végéhez.
• Insert: Beszúr egy elemet a megadott indexhez.
• Remove, RemoveAt, RemoveRange: törli az adott elemet
• Sort: Rendezi az elemeket.
Gyakorlás listával:
Készíts listát, amelyben 5 db keresztnevet tárolsz!
– Kérj be a felhasználótól egy betűt.
– Hányszor szerepel az adott betű összesen a listában?
– Írd ki az első olyan nevet, amelyik ezzel a betűvel kezdődik!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
List<string> nevek = new List<string>(); nevek.Add("Barbara"); nevek.Add("Annamária"); nevek.Add("Péter"); nevek.Add("Géza"); nevek.Add("Ákos"); foreach (var l in nevek) { Console.Write("{0},",l); } Console.WriteLine("Kérek egy betűt!"); string betu = Console.ReadLine(); betu = betu.ToUpper(); bool talalt = false; //Írd ki azt a nevet, ami a megadott betűvel kezdődik! for (int i=0; i<nevek.Count; i++) { if (nevek[i].StartsWith(betu)) { talalt = true; Console.WriteLine("{0} betű: szerepel a szóban {1} ", betu,nevek[i]); } } if (talalt == false) Console.WriteLine("Nincs ilyen szó!"); //A keresett betű hány névben szerepel? int nevekben = 0; for (int i=0; i<nevek.Count; i++) { if (nevek[i].IndexOf(betu) > -1 || nevek[i].IndexOf(betu.ToLower()) > -1) { nevekben++; } } Console.WriteLine("A keresett betű {0} {1}db szóban szerepel",betu,nevekben); //Összesen hányszor szerepel a keresett betű a listában? int osszesen = 0; for (int i=0; i<nevek.Count; i++) { foreach(char chr in nevek[i]) { if (chr == Convert.ToChar(betu) || chr == Convert.ToChar(betu.ToLower())) osszesen++; } } Console.WriteLine("{0} betű ennyiszer szerepel: {1} db",betu,osszesen); |