Les col·leccions en C# són estructures de dades que permeten emmagatzemar i gestionar grups d'objectes. A diferència dels arrays, les col·leccions poden canviar de mida dinàmicament i ofereixen una major flexibilitat i funcionalitat. En aquest tema, explorarem les col·leccions més comunes en C# i com utilitzar-les.

Tipus de Col·leccions

  1. List

Una llista és una col·lecció genèrica que permet emmagatzemar elements de qualsevol tipus. Les llistes són dinàmiques, és a dir, poden canviar de mida automàticament.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int>();
        numbers.Add(1);
        numbers.Add(2);
        numbers.Add(3);

        foreach (int number in numbers)
        {
            Console.WriteLine(number);
        }
    }
}

  1. Dictionary<TKey, TValue>

Un diccionari és una col·lecció que emmagatzema parelles clau-valor. Cada clau ha de ser única.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, int> ages = new Dictionary<string, int>();
        ages["Alice"] = 30;
        ages["Bob"] = 25;

        foreach (var kvp in ages)
        {
            Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");
        }
    }
}

  1. Queue

Una cua és una col·lecció que segueix el principi FIFO (First In, First Out). Els elements s'afegeixen al final i es treuen del principi.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<string> queue = new Queue<string>();
        queue.Enqueue("First");
        queue.Enqueue("Second");
        queue.Enqueue("Third");

        while (queue.Count > 0)
        {
            Console.WriteLine(queue.Dequeue());
        }
    }
}

  1. Stack

Una pila és una col·lecció que segueix el principi LIFO (Last In, First Out). Els elements s'afegeixen i es treuen del mateix extrem.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<string> stack = new Stack<string>();
        stack.Push("First");
        stack.Push("Second");
        stack.Push("Third");

        while (stack.Count > 0)
        {
            Console.WriteLine(stack.Pop());
        }
    }
}

  1. HashSet

Un conjunt és una col·lecció que emmagatzema elements únics. No permet duplicats.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> set = new HashSet<int>();
        set.Add(1);
        set.Add(2);
        set.Add(2); // No s'afegirà perquè ja existeix

        foreach (int number in set)
        {
            Console.WriteLine(number);
        }
    }
}

Comparació de Col·leccions

Col·lecció Ordenació Duplicats Accés per Clau Accés per Índex Principi
List No -
Dictionary<TKey, TValue> No No (claus) No -
Queue No No No FIFO
Stack No No No LIFO
HashSet No No No No -

Exercicis Pràctics

Exercici 1: Llista de Nombres

Crea una llista de nombres enters i afegeix-hi els nombres del 1 al 10. Després, imprimeix tots els nombres de la llista.

Exercici 2: Diccionari de Contactes

Crea un diccionari per emmagatzemar noms de persones i els seus números de telèfon. Afegeix-hi almenys tres contactes i imprimeix-los.

Exercici 3: Cua de Tasques

Crea una cua per gestionar una llista de tasques. Afegeix-hi almenys tres tasques i després processa-les (imprimeix-les i elimina-les de la cua).

Exercici 4: Pila de Llibres

Crea una pila per emmagatzemar títols de llibres. Afegeix-hi almenys tres llibres i després imprimeix-los en ordre invers (últim afegit, primer imprès).

Exercici 5: Conjunt d'Elements Únics

Crea un conjunt per emmagatzemar nombres enters. Afegeix-hi almenys cinc nombres, incloent-hi algun duplicat, i imprimeix tots els nombres del conjunt.

Solucions

Solució 1: Llista de Nombres

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int>();
        for (int i = 1; i <= 10; i++)
        {
            numbers.Add(i);
        }

        foreach (int number in numbers)
        {
            Console.WriteLine(number);
        }
    }
}

Solució 2: Diccionari de Contactes

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, string> contacts = new Dictionary<string, string>();
        contacts["Alice"] = "123-456-7890";
        contacts["Bob"] = "987-654-3210";
        contacts["Charlie"] = "555-555-5555";

        foreach (var contact in contacts)
        {
            Console.WriteLine($"Name: {contact.Key}, Phone: {contact.Value}");
        }
    }
}

Solució 3: Cua de Tasques

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<string> tasks = new Queue<string>();
        tasks.Enqueue("Task 1");
        tasks.Enqueue("Task 2");
        tasks.Enqueue("Task 3");

        while (tasks.Count > 0)
        {
            Console.WriteLine(tasks.Dequeue());
        }
    }
}

Solució 4: Pila de Llibres

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<string> books = new Stack<string>();
        books.Push("Book 1");
        books.Push("Book 2");
        books.Push("Book 3");

        while (books.Count > 0)
        {
            Console.WriteLine(books.Pop());
        }
    }
}

Solució 5: Conjunt d'Elements Únics

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> set = new HashSet<int>();
        set.Add(1);
        set.Add(2);
        set.Add(3);
        set.Add(2); // No s'afegirà perquè ja existeix
        set.Add(4);
        set.Add(5);

        foreach (int number in set)
        {
            Console.WriteLine(number);
        }
    }
}

Conclusió

Les col·leccions en C# són eines poderoses per gestionar grups d'objectes de manera eficient i flexible. Hem explorat les col·leccions més comunes com List<T>, Dictionary<TKey, TValue>, Queue<T>, Stack<T> i HashSet<T>, i hem vist com utilitzar-les amb exemples pràctics. Amb aquesta base, estàs preparat per gestionar dades de manera més avançada en els teus projectes de C#.

© Copyright 2024. Tots els drets reservats