Menu
Coddy logo textTech

מה זה מערך (Array)?

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

מאת Kevin Spektor, מייסד שותף ו-CTO

עודכן ב-24 בספטמבר 2026

אפליקציית מזג אוויר שמציגה את הטמפרטורות של השבוע צריכה שבעה מספרים. היא יכולה להשתמש בשבעה משתנים נפרדים, monday, tuesday וכן הלאה, אבל אז שום לולאה לא תוכל לעבור עליהם, והוספת יום שמיני תדרוש לכתוב קוד חדש. מערך שם את שבעת המספרים תחת שם אחד, temperatures, בתאים ממוספרים מ-0 עד 6.

איך מערך עובד

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

address of element i = start address + i × element size

נניח שמערך של מספרים שלמים של 32 ביט (4 בייטים כל אחד) מתחיל בכתובת זיכרון 1000. איבר 0 נמצא ב-1000, איבר 1 ב-1004, איבר 2 ב-1008 ואיבר 3 ב-1012. ההגעה לאיבר 3 או לאיבר 3,000,000 לוקחת אותו צעד יחיד, ולכן קריאה ממערך לפי אינדקס נקראת זמן קבוע, ונכתבת O(1).

המודול array של Python שומר מספרים גולמיים בדיוק כך, אז אפשר לבדוק את החשבון:

4 bytes per element
16 bytes in total
scores[0] = 90 at address 1000
scores[1] = 75 at address 1004
scores[2] = 88 at address 1008
scores[3] = 62 at address 1012

הנוסחה הזו מסבירה גם למה רוב השפות סופרות מ-0. האינדקס הוא היסט (offset): כמה איברים לדלג מההתחלה. האיבר הראשון נמצא במרחק 0 איברים מההתחלה, ולכן האינדקס שלו הוא 0, והאיבר האחרון במערך באורך n נמצא באינדקס n − 1. כמה שפות, כמו Lua, MATLAB, R ו-Fortran, מתחילות דווקא ב-1.

שימוש במערך ב-Python

רוב הקוד ב-Python משתמש ב-list המובנית בתור מערך. יוצרים אותה עם סוגריים מרובעים, קוראים ומשנים איברים לפי אינדקס, ומקבלים את האורך שלה עם len():

18
25
19
5
[18, 22, 25, 23, 19, 20]

אינדקס שלילי סופר מהסוף, כך ש-temperatures[-1] הוא האיבר האחרון. הקיצור הזה שייך ל-Python; ב-C וב-Java אין אינדקסים שליליים.

כמה עולות פעולות על מערך

הסידור הרציף הופך חלק מהפעולות למהירות ואחרות לאיטיות. העלות גדלה עם n, מספר האיברים:

פעולהדוגמה ב-Pythonעלות
קריאה או שינוי של איבר לפי אינדקסa[3] = 7O(1), צעד אחד
הוספת איבר בסוףa.append(7)O(1) בממוצע
הכנסה או הסרה בהתחלהa.insert(0, 7)O(n), כל האיברים זזים
חיפוש ערך במערך לא ממוין7 in aO(n), בדיקה אחד אחד
חיפוש ערך במערך ממויןחיפוש בינאריO(log n)

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

מעבר על מערך בלולאה

מערכים ולולאות הולכים יחד: לולאה מבקרת בכל איבר בתורו, ולזה קוראים איטרציה. אותן כמה שורות מטפלות במערך של 5 איברים או של 5 מיליון.

Total: 28.5
Most expensive: 12.0

מערכים בשפות אחרות

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

int scores[5] = {90, 75, 88, 62, 100};   /* 5 × 4 bytes = 20 bytes */

גם למערכים ב-Java יש אורך קבוע, ואיברים חדשים מתחילים בערך ברירת מחדל, למשל 0 למספרים. כשצריך ב-Java מערך שגדל, משתמשים ב-ArrayList:

int[] scores = new int[5];   // five elements, all 0
scores[0] = 90;

מערכים ב-JavaScript גדלים וקטנים בחופשיות ויכולים לערבב טיפוסים, כמו ב-[1, "two", true].

מערכים שגדלים, כמו list של Python, ArrayList של Java ו-std::vector של C++, נקראים מערכים דינמיים. הם שומרים מקום נוסף בסוף. כשהמקום הזה נגמר, הם מקצים בלוק גדול יותר, מעתיקים אליו את כל האיברים וממשיכים. ההעתקות נדירות מספיק כדי שהוספה בסוף תישאר מהירה בממוצע.

מערך יכול גם להכיל מערכים אחרים. grid[row][col] קורא תא אחד של מערך דו ממדי, הסידור שמשמש ללוחות משחק, גיליונות אלקטרוניים ותמונות. המדריך ל-C על מערכים רב ממדיים מראה איך הם יושבים בזיכרון.

טעויות נפוצות

טעות של אחד (off by one). למערך של 3 איברים יש אינדקסים 0, 1 ו-2, כך שאינדקס 3 כבר מעבר לסוף. Python עוצרת עם שגיאה:

IndexError: list index out of range

Java זורקת ArrayIndexOutOfBoundsException, ו-JavaScript מחזירה בשקט undefined. ב-C אין שום בדיקה: קריאה מעבר לסוף היא התנהגות לא מוגדרת, שיכולה להחזיר זבל או להקריס את התוכנית עם segmentation fault.

העתקה בהשמה. ב-Python, ב-Java וב-JavaScript, b = a לא מעתיק מערך; שני השמות מפנים לאותו מערך, כך ששינוי של b משנה גם את a. להעתקה אמיתית השתמשו ב-a.copy() ב-Python או ב-[...a] ב-JavaScript. העמוד על משתנים מסביר למה.

לאן ממשיכים מכאן

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

שאלות נפוצות

מה זה מערך במתמטיקה?
במתמטיקה של בית הספר היסודי, מערך הוא קבוצה של עצמים שמסודרים בשורות ובעמודות שוות, למשל 3 שורות של 4 נקודות. משתמשים בו כדי להמחיש כפל: ספירת הנקודות נותנת 3 × 4 = 12. מערך דו ממדי בתוכנית הוא אותה תמונה, כשבכל מיקום נשמר ערך.
מה דוגמה למערך?
רשימת הטמפרטורות של שבוע, [18, 21, 25, 23, 19, 17, 20], היא מערך של שבעה מספרים, שבו temperatures[0] הוא הערך של יום שני. דוגמאות יומיומיות נוספות הן הפיקסלים בשורה של תמונה, התווים של מחרוזת והניקוד בטבלת הדירוג של משחק.
איך מסבירים מה זה מערך לילד?
משווים אותו לתבנית ביצים. לתבנית יש שם אחד, יש בה מספר קבוע של גומות בשורה, ובכל גומה יש ביצה אחת. מוצאים ביצה לפי מספר הגומה, ומתכנתים מתחילים לספור את הגומות מ-0.
מה יש בתוך מערך?
מערך מכיל איברים, הערכים הבודדים שנשמרים בו, כל אחד באינדקס משלו. ב-C וב-Java לכל האיברים יש אותו טיפוס, למשל כולם int או כולם double. רשימות ב-Python ומערכים ב-JavaScript יכולים לערבב טיפוסים, כי הם שומרים הפניות לערכים ולא את הערכים עצמם.
מה ההבדל בין מערך לרשימה?
מערך שומר את האיברים שלו זה לצד זה בזיכרון, כך שאפשר להגיע לכל איבר ישירות לפי אינדקס. רשימה מקושרת (linked list) שומרת כל איבר בנפרד עם מצביע לאיבר הבא, כך שכדי להגיע לאיבר ה-1,000 צריך לעבור על 999 האיברים הראשונים. ה-list המובנית של Python אינה רשימה מקושרת: היא מערך דינמי שגדל כשמוסיפים איברים.
איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל