מעבר על קבוצות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 66 מתוך 66.
מעבר על HashSet מאפשר לך לגשת לכל איבר בקבוצה. ב-C# אפשר להשתמש בדרכים שונות כדי לעבור על HashSet.
שימוש בלולאת foreach:
// צור HashSet
HashSet<string> colors = new HashSet<string>();
// הוסף איברים ל-HashSet
colors.Add("Red");
colors.Add("Green");
colors.Add("Blue");
// עבור על איברי ה-HashSet
foreach (string color in colors)
{
Console.WriteLine(color);
}
זכור ש-HashSet אינו שומר על סדר ההוספה, ולכן ייתכן שלא יתבצע מעבר על האיברים באותו סדר שבו הם נוספו.
אפשר גם להמיר תחילה למערך או לרשימה:
// המר למערך ועבור על איבריו
string[] colorArray = colors.ToArray();
for (int i = 0; i < colorArray.Length; i++)
{
Console.WriteLine(colorArray[i]);
}
אתגר
קלצרו מתודה בשם PrintSetElements שמקבלת HashSet של מספרים שלמים כקלט. המתודה צריכה לעבור על הקבוצה ולהדפיס כל איבר בשורה חדשה.
לדוגמה, אם הקבוצה מכילה [5, 2, 8], המתודה שלכם צריכה להדפיס:
5 2 8
נסו בעצמכם
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
public static void PrintSetElements(HashSet<int> set)
{
// כתבו כאן את הקוד שלכם
}
static void Main(string[] args)
{
HashSet<int> numbers = new HashSet<int>();
// קראו את השורה הראשונה כדי לבדוק את הפורמט
string firstLine = Console.ReadLine();
// בדקו אם הקלט הוא בפורמט של מערך JSON
if (firstLine != null && firstLine.StartsWith("[") && firstLine.EndsWith("]"))
{
try
{
// חלצו את התוכן שבין הסוגריים המרובעים
string arrayContent = firstLine.Substring(1, firstLine.Length - 2);
// נסו לנתח את התוכן של מערך JSON
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values)
{
// הסירו מירכאות, אם ישנן
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\""))
{
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// המירו למספר שלם והוסיפו לקבוצה
if (int.TryParse(cleanValue, out int num))
{
numbers.Add(num);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing JSON input: {ex.Message}");
return;
}
}
else
{
try
{
// פורמט מסורתי - קראו את מספר האיברים ולאחר מכן את האיברים
int count = int.Parse(firstLine);
// קראו כל איבר והוסיפו אותו לקבוצה
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);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםהכרזה ואתחול של מערכים דו־ממדייםגישה לאיברי מערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםמערכים משונניםפעולות מטריצה נפוצותחזרה – מערכים רב־ממדיים7אופרטורים לוגיים מתקדמים
הערכה בקיצור דרךאופרטורים לוגיים מותניםקדימות אופרטוריםסיכום – אופרטורים מתקדמים2קבלת החלטות מתקדמת
תנאים מרוביםלוגיקה בוליאנית מורכבתהשוואה בין If ל-Switchהצהרות Switch מקוננותסיכום — קבלת החלטות מתקדמת5טיפול בחריגות
יסודות try-catchסוגי חריגותבלוקי catch מרוביםעבודה עם קבציםבלוק finallyשימוש ב-using לעומת try-finallyחריגות מותאמות אישיתסיכום – טיפול בשגיאות3שיפורים בלולאות
ביצועי לולאותאיטרציה במבנים מורכביםכל אחד מסוגי הלולאותרפקטורינג של לולאותסיכום – לולאות שעברו אופטימיזציה6טיפול בערכי Null
יסודות הפניה ל-Nullטיפוסי ערכים שניתנים ל-Nullדפוסי בדיקת Nullתכנות הגנתיסיכום – בטיחות מול Null9מפת גיבוב חלק 1
מהי מפת גיבוב?הכרזה על מפת גיבובבדיקה אם מפתח קייםגישה לערכיםשינוי מילוניםסיכום – מפת גיבוב12HashSet חלק 2
מתמטיקה - איחוד של HashSetsמתמטיקה - חיתוך של HashSetמתמטיקה - הפרש קבוצותמתמטיקה - הפרש סימטרימעבר על קבוצותתרגלו בעצמכם: קומפיילר C# אונליין