Konspekt C#

Osa 5 – Kollektsioonid. Listid ja sõnastikud. Meetodid ja näidised

ArrayList (System.Collections)

Peamised meetodid:

  • Add() – lisab elemendi lõppu
  • Contains() – kontrollib, kas element on olemas
  • Count – tagastab elementide arvu
  • Insert(index, item) – lisab elemendi kindlale kohale
  • IndexOf() – otsib elemendi indeksit
  • Sort() – 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 mitu
  • IndexOf()Remove()RemoveAt()
  • Insert(index, item) – lisa kindlasse kohta
  • Sort() – sorteerib andmed
  • BinarySearch() – 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)
  • KeysValues
  • dictionary[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üüpMillal kasutada?
ArrayListLihtsaks 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:

  1. Leiavad kõik filmid, mis kuuluvad kindlasse žanrisse.
  2. Leiavad uusima filmi.
  3. 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);
        }
    }
}

Lehed: 1 2 3 4 5 6