מדריך C# – מערכים רב-מימדיים

‏ • Sela

בחלק הקודם במדריך למדנו כיצד לעבור עם מערכים. בחלק זה נרחיב את הידע שלנו למערכים רב-מימדיים.

מה זה מערך רב מימדי?

כדאי להתחיל ראשית בהסבר על מערך דו-מימדי.
מערך דו-מימדי הוא מערך, כלומר אוסף איברים מאותו סוג שיושבים בזכרון בצורה רציפה, שכדי לגשת לאיברים שבו צריכים שני אינדקסים.

ניתן להתייחס למערך דו-מימדי בצורה ויזואלית כאל טבלה של משתנים רגילים:

מדריך #C למתחילים - מערכים רב-מימדיים

במערך זה יש שני מימדים, הראשון בגודל 3 והשני בגודל 10, ולכן סה"כ האיברים במערך הוא 30.
בשביל לגשת לאיבר כלשהוא במערך צריך לתת את האינדקסים שלו בשני המימדים, לדוגמא arr[0,0] הוא האיבר בשורה הראשונה, בעמודה הראשונה.

באופן דומה ניתן להגדיר מערך תלת-מימדי, שבו צריך 3 אינדקסים כדי לגשת לכל איבר, וכן הלאה.
לרוב נעבוד לכל היותר עם מערכים דו-מימדיים וכך גם יהיו הדוגמאות שלנו.

יצירת מערך דו-מימדי

יצירת מערך דו-מימדי נעשית באופן דומה ליצירת מערך רגיל:

int[,] arr = new int[3, 10];

בדוגמא זו יצרנו מערך דו-מימדי בעל מימד ראשון בגודל 3 ומימד שני בגודל 10, סה"כ מספר האיברים במערך הוא 30.

גישה לאיברי המערך הדו-מימדי

בשביל לגשת למערך דו-מימדי יש לציין את שני האינדקסים של האיבר שאליו אנו מעוניינים לגשת.

לדוגמא, קטע הקוד הבא ניגש לאיבר בשורה השלישית ובעמודה העשירית ומציב שם את המספר 7:

arr[2, 9] = 7;

מעבר על איברי מערך דו-מימדי

בשביל לעבור על כל האיברים במערך דו-מימדי נצטרך לעשות שימוש בלולאה מקוננת, כפי שלמדנו באחד החלקים הקודמים במדריך.

הלולאה החיצונית תעבור על האינדקס הראשון ואילו הלולאה הפנימית תעבור על האינדקס השני:

int[,] arr = new int[3, 10];

for (int
i = 0; i < arr.GetLength(0); ++i)
{
   
for (int j = 0; j < arr.GetLength(1); ++j)
    {
        arr[i, j] = (i + 1) * (j + 1);
    }
}

בדוגמא זו אנו עושים שימוש בפונקציה arr.GetLength, פונקציה זו מקבלת את מספר המימד ומחזירה את גודלו.

כלומר קריאה לפונקציה (arr.GetLength(0 תחזיר את גודל המימד הראשון, 3, ואילו קריאה לפונקציה (arr.GetLength(1תחזיר את גודל המימד השני, 10.

נציין ששימוש בתכונה arr.Length תחזיר את סך כל האיברים במערך, כלומר 30.

תגיות: , , ,

arikp

אריק פוזננסקי הוא יועץ בכיר ומרצה בסלע. הוא השלים שני תארי B.Sc. במתמטיקה ומדעי המחשב בהצטיינות יתרה בטכניון. לאריק ידע נרחב בטכנולוגיות מיקרוסופט, כולל .NET עם C#, WPF, Silverlight, WinForms, Interop, COM/ATL, C++ Win32 ו reverse engineering.

תגובות בפייסבוק