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
- 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); } } }
- 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}"); } } }
- 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()); } } }
- 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()); } } }
- 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 |
Sí | Sí | No | Sí | - |
Dictionary<TKey, TValue> | No | No (claus) | Sí | No | - |
Queue |
No | Sí | No | No | FIFO |
Stack |
No | Sí | 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#.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització