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.
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).
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!
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.
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!
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);