Itération sur les ensembles
Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 66 sur 66.
Itérer sur un HashSet vous permet d'accéder à chaque élément de l'ensemble. En C#, vous pouvez utiliser diverses approches pour itérer à travers un HashSet.
Utilisation d'une boucle foreach :
// Créer un HashSet
HashSet<string> colors = new HashSet<string>();
// Ajouter des éléments au HashSet
colors.Add("Red");
colors.Add("Green");
colors.Add("Blue");
// Itérer à travers le HashSet
foreach (string color in colors)
{
Console.WriteLine(color);
}
Rappelez-vous que HashSet ne maintient pas l'ordre d'insertion, les éléments ne seront donc pas itérés dans le même ordre qu'ils ont été ajoutés.
Vous pouvez également convertir en tableau ou liste d'abord :
// Convertir en tableau et itérer
string[] colorArray = colors.ToArray();
for (int i = 0; i < colorArray.Length; i++)
{
Console.WriteLine(colorArray[i]);
}
Défi
FacileCréez une méthode nommée PrintSetElements qui prend un HashSet d'entiers en entrée. La méthode doit itérer à travers l'ensemble et afficher chaque élément sur une nouvelle ligne.
Par exemple, si l'ensemble contient [5, 2, 8], votre méthode doit afficher :
5 2 8
Aide-mémoire
Pour itérer sur un HashSet en C#, utilisez une boucle foreach :
HashSet<string> colors = new HashSet<string>();
colors.Add("Red");
colors.Add("Green");
colors.Add("Blue");
foreach (string color in colors)
{
Console.WriteLine(color);
}
HashSet ne maintient pas l'ordre d'insertion, donc les éléments peuvent ne pas être itérés dans le même ordre qu'ils ont été ajoutés.
Vous pouvez également convertir en tableau d'abord :
string[] colorArray = colors.ToArray();
for (int i = 0; i < colorArray.Length; i++)
{
Console.WriteLine(colorArray[i]);
}
Essayez vous-même
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
public static void PrintSetElements(HashSet<int> set)
{
// Écrivez votre code ici
}
static void Main(string[] args)
{
HashSet<int> numbers = new HashSet<int>();
// Lire la première ligne pour vérifier le format
string firstLine = Console.ReadLine();
// Vérifier si l'entrée est au format tableau JSON
if (firstLine != null && firstLine.StartsWith("[") && firstLine.EndsWith("]"))
{
try
{
// Extraire le contenu entre les crochets carrés
string arrayContent = firstLine.Substring(1, firstLine.Length - 2);
// Essayer d'analyser le contenu du tableau JSON
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values)
{
// Supprimer les guillemets s'ils sont présents
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\""))
{
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// Analyser en entier et ajouter à l'ensemble
if (int.TryParse(cleanValue, out int num))
{
numbers.Add(num);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing JSON input: {ex.Message}");
return;
}
}
else
{
try
{
// Format traditionnel - lire le nombre puis les éléments
int count = int.Parse(firstLine);
// Lire chaque élément et l'ajouter à l'ensemble
for (int i = 0; i < count; i++)
{
int num = int.Parse(Console.ReadLine());
numbers.Add(num);
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing traditional input: {ex.Message}");
return;
}
}
PrintSetElements(numbers);
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Tableaux multidimensionnels
Bases des tableaux 2DDéclaration et initialisation en 2DAccès aux éléments d'un tableau 2DBoucles imbriquées et tableaux 2DTableaux irréguliersOpérations matricielles courantesRécapitulatif - Multidimensionnel4Techniques de contrôle de flux
Retours anticipésClauses de gardeInstructions de saut (goto)Break et ContinueAplatir les conditionnelles imbriquées2Prise de décision avancée
Conditions multiplesLogique booléenne complexeComparaison If vs SwitchInstructions Switch imbriquéesRécapitulatif - Décisions avancées5Gestion des exceptions
Bases du Try-CatchTypes d'exceptionsBlocs Catch multiplesManipulation de fichiersLe bloc FinallyUsing vs Try-FinallyExceptions personnaliséesRécapitulatif - Gestion des erreurs3Améliorations des boucles
Performance des bouclesItération de structures complexesChaque type de boucleRefactorisation des bouclesRécapitulatif - Boucles optimisées6Gestion des valeurs nulles
Les bases des références nullesTypes valeur nullablesPatterns de vérification de nullitéProgrammation défensiveRécapitulatif - Null Safety9HashMap Partie 1
Qu'est-ce qu'un HashMap ?Déclarer un HashMapVérifier si une clé existeAccéder aux valeursModifier des dictionnairesRécapitulatif - HashMap12HashSet Partie 2
Maths - Union de HashSetsMaths - Intersection de HashSetsMaths - Différence d'ensemblesMaths - Différence symétriqueItération sur les ensembles