Osa 5 – Kollektsioonid. Listid ja sõnastikud. Meetodid ja näidised
ArrayList (System.Collections)
Peamised meetodid:
Add()– lisab elemendi lõppuContains()– kontrollib, kas element on olemasCount– tagastab elementide arvuInsert(index, item)– lisab elemendi kindlale kohaleIndexOf()– otsib elemendi indeksitSort()– järjestab elemendid kasvavalt
ArrayList nimed = new ArrayList();
nimed.Add("Kati");
nimed.Add("Mati");
nimed.Add("Juku");
if (nimed.Contains("Mati"))
Console.WriteLine("Mati olemas");
Console.WriteLine("Nimesid kokku: " + nimed.Count);
nimed.Insert(1, "Sass");
Console.WriteLine("Mati indeks: " + nimed.IndexOf("Mati"));
Console.WriteLine("Mari indeks: " + nimed.IndexOf("Mari"));
foreach (string nimi in nimed)
Console.WriteLine(nimi);
Tuple (järjendid)
Tuple<float, char> route = new Tuple<float, char>(2.5f, 'N');
Console.WriteLine($"Vahemaa: {route.Item1}, Suund: {route.Item2}");
List (System.Collections.Generic)
Peamised meetodid:
Add(),AddRange()– lisa element või mituIndexOf(),Remove(),RemoveAt()Insert(index, item)– lisa kindlasse kohtaSort()– sorteerib andmedBinarySearch()– kiire otsing (peab olema sorteeritud)
class Person
{
public string Name { get; set; }
}
List<Person> people = new List<Person>();
people.Add(new Person() { Name = "Kadi" });
people.Add(new Person() { Name = "Mirje" });
foreach (Person p in people)
Console.WriteLine(p.Name);
LinkedList (System.Collections.Generic)
Võimalused:
AddFirst(value),AddLast(value)AddBefore(node, value),AddAfter(node, value)RemoveFirst(),RemoveLast(),Remove(value)
LinkedList<int> loetelu = new LinkedList<int>();
loetelu.AddLast(5);
loetelu.AddLast(3);
loetelu.AddFirst(0);
foreach (int arv in loetelu)
Console.WriteLine(arv);
loetelu.RemoveFirst();
loetelu.RemoveLast();
loetelu.AddLast(555);
loetelu.Remove(555);
Dictionary<TKey, TValue> – Sõnastik
Peamised meetodid:
Add(key, value)Remove(key)ContainsKey(key),ContainsValue(value)Keys,Valuesdictionary[key] = newValue;
Dictionary<int, string> riigid = new Dictionary<int, string>();
riigid.Add(1, "Hiina");
riigid.Add(2, "Eesti");
riigid.Add(3, "Itaalia");
foreach (var paar in riigid)
Console.WriteLine($"{paar.Key} - {paar.Value}");
string pealinn = riigid[2];
riigid[2] = "Eestimaa";
riigid.Remove(3);
Klasside näide:
Dictionary<char, Person> inimesed = new Dictionary<char, Person>();
inimesed.Add('k', new Person() { Name = "Kadi" });
inimesed.Add('m', new Person() { Name = "Mait" });
foreach (var entry in inimesed)
Console.WriteLine($"{entry.Key} - {entry.Value.Name}");
Kokkuvõte: millal millist kasutada?
| Andmetüüp | Millal kasutada? |
|---|---|
ArrayList | Lihtsaks prototüüpimiseks (mitte soovitatav uues koodis) |
List<T> | Enamiku tavaliste andmekogumite jaoks |
LinkedList<T> | Kui vaja palju lisada/teha muudatusi jada keskel |
Dictionary<K,V> | Kiire võtme alusel andmete leidmine |
Tuple<T1,T2> | Kui vaja ajutiselt hoida mitme erineva tüübi väärtusi koos |
Ülesanne
Filmide kogu
Kirjeldus:
Loo klass Film, millel on:
Pealkiri(string)Aasta(int)Žanr(string)
Loo List<Film> vähemalt 5 filmiga (kas käsitsi või kasutajalt).
Kirjuta funktsioonid, mis:
- Leiavad kõik filmid, mis kuuluvad kindlasse žanrisse.
- Leiavad uusima filmi.
- Grupeerivad filmid žanrite kaupa (
Dictionary<string, List<Film>>).
namespace põhikonstruktsioonid
{
internal class Film
{
string Pealkiri;
int Aasta;
string Žanr;
public Film(string pealkiri, int aasta, string žanr)
{
this.Pealkiri = pealkiri;
this.Aasta = aasta;
this.Žanr = žanr;
}
public void Greeting()
{
Console.WriteLine($"Film: {Pealkiri}, Aasta: {Aasta}, Žanr: {Žanr}");
}
public static void Statistik(List<Film> filmid, Dictionary<string, List<Film>> žanri)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Sisestage filmi pealkiri");
string pealkiri = Console.ReadLine();
Console.WriteLine("Sisesta filmi ilmumisaasta");
int aasta = int.Parse(Console.ReadLine());
Console.WriteLine("Sisestage filmižanr");
string žanr = Console.ReadLine();
Film newFilm = new Film(pealkiri, aasta, žanr);
filmid.Add(newFilm);
if (!žanri.ContainsKey(žanr))
{
žanri[žanr] = new List<Film>();
}
žanri[žanr].Add(newFilm);
}
foreach (Film film in filmid)
{
film.Greeting();
}
}
public static void Dict(Dictionary<string, List<Film>> žanri)
{
Console.WriteLine("Kas soovite vaadata teatud žanri erinevaid filme? (jah/ei)");
string vas = Console.ReadLine();
if (vas.ToLower() != "ei")
{
Console.WriteLine("Mis žanri filme sa vaadata tahad?");
string žanr = Console.ReadLine();
if (žanri.ContainsKey(žanr))
{
foreach (Film film in žanri[žanr])
{
Console.WriteLine($" {film.Pealkiri}, {film.Aasta}");
}
}
else
{
Console.WriteLine($"Žanr {žanr} ei leitud.");
}
}
}
public static void Main(string[] args)
{
List<Film> filmid = new List<Film>();
Dictionary<string, List<Film>> žanri = new Dictionary<string, List<Film>>();
Film.Statistik(filmid, žanri);
Film.Dict(žanri);
}
}
}

