Menu
Coddy logo textTech

Iterare sugli insiemi

Fa parte della sezione Logica e flusso del percorso C# di Coddy. Lezione 66 di 66.

L'iterazione su un HashSet ti consente di accedere a ogni elemento dell'insieme. In C#, puoi usare diversi approcci per iterare su un HashSet.

Usando un ciclo foreach:

// Crea un HashSet
HashSet<string> colors = new HashSet<string>();

// Aggiungi elementi al HashSet
colors.Add("Red");
colors.Add("Green");
colors.Add("Blue");

// Itera sul HashSet
foreach (string color in colors)
{
    Console.WriteLine(color);
}

Ricorda che HashSet non mantiene l'ordine di inserimento, quindi gli elementi potrebbero non essere iterati nello stesso ordine in cui sono stati aggiunti.

Puoi anche convertire prima in un array o in una lista:

// Converti in un array e itera
string[] colorArray = colors.ToArray();
for (int i = 0; i < colorArray.Length; i++)
{
    Console.WriteLine(colorArray[i]);
}
challenge icon

Sfida

Facile

Crea un metodo denominato PrintSetElements che accetta in input un HashSet di interi. Il metodo dovrebbe iterare sull'insieme e stampare ogni elemento su una nuova riga.

Ad esempio, se l'insieme contiene [5, 2, 8], il metodo dovrebbe stampare:

5 2 8

Provalo tu

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
    public static void PrintSetElements(HashSet<int> set)
    {
        // Scrivi qui il tuo codice
    }
    
    static void Main(string[] args)
    {
        HashSet<int> numbers = new HashSet<int>();
        
        // Leggi la prima riga per verificare il formato
        string firstLine = Console.ReadLine();
        
        // Verifica se l'input è nel formato di un array JSON
        if (firstLine != null && firstLine.StartsWith("[") && firstLine.EndsWith("]"))
        {
            try
            {
                // Estrai il contenuto tra parentesi quadre
                string arrayContent = firstLine.Substring(1, firstLine.Length - 2);
                
                // Prova a interpretare il contenuto dell'array JSON
                string[] values = Regex.Split(arrayContent, @",\s*");
                foreach (string value in values)
                {
                    // Rimuovi le virgolette, se presenti
                    string cleanValue = value.Trim();
                    if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\""))
                    {
                        cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
                    }
                    
                    // Interpreta il valore come numero intero e aggiungilo all'insieme
                    if (int.TryParse(cleanValue, out int num))
                    {
                        numbers.Add(num);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error parsing JSON input: {ex.Message}");
                return;
            }
        }
        else
        {
            try
            {
                // Formato tradizionale: leggi prima il numero di elementi, poi gli elementi
                int count = int.Parse(firstLine);
                
                // Leggi ogni elemento e aggiungilo all'insieme
                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);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C# online