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ó
