C# listák

10. osztály 10évf_c# C# programozás Programozás

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