Arduino:
שימוש במערכים אסוציאטיביים
איך לעשות:
באופן מדויק, ארדואינו אין תמיכה פנימית למערכים אסוציאטיביים כפי שתמצא בשפות ברמה גבוהה יותר. אבל, אל תחששו. אנחנו יכולים להיות יצירתיים באמצעות מבנים ומערכים כדי לחקות פונקציונליות זו. הנה דוגמה פשוטה ליצירת “מערך אסוציאטיבי” בסיסי לאחסון וגישה לטמפרטורות בערים שונות.
ראשית, הגדר מבנה לאחסון העיר (מפתח) והטמפרטורה שלה (ערך):
struct CityTemperature {
String city;
float temperature;
};
לאחר מכן, התחל מערך של אובייקטים CityTemperature
:
CityTemperature temperatures[] = {
{"New York", 19.5},
{"Los Angeles", 22.0},
{"Chicago", 17.0}
};
הנה איך אתה יכול לגשת ולהציג את הטמפרטורה של עיר מסוימת:
void setup() {
Serial.begin(9600);
for(int i = 0; i < 3; i++) {
if(temperatures[i].city == "Los Angeles") {
Serial.print("The temperature in Los Angeles is: ");
Serial.println(temperatures[i].temperature);
}
}
}
void loop() {
// כאן כלום לעת עתה.
}
הרצת הקוד הזה תניב את הפלט:
The temperature in Los Angeles is: 22.0
חקירה עמוקה
באופן היסטורי, שפות תכנות כמו C ו-C++ (שממנה נגזרת התחביר של ארדואינו) לא הגיעו עם תמיכה פנימית במערכים אסוציאטיביים, מה שהוביל לפתרונות חלופיים כמו הדוגמה שמוצגת למעלה. הגישה זו פשוטה יחסית אך סובלת מסלימה גרועה עם הגדלת גודל הנתונים בגלל זמן חיפוש של (O(n)).
שפות כמו פייתון מציעות מילונים, ובג’אווהסקריפט יש אובייקטים למטרה זו, שניהם הרבה יותר יעילים לניהול זוגות מפתח-ערך. בארדואינו, כשביצועים ויעילות הופכים לקריטיים, מפתחים עשויים לבחור במבני נתונים מתוחכמים יותר, כמו טבלאות גיבוב, שמיושמים באמצעות ספריות.
למרות שארדואינו לא תומך ילידית במערכים אסוציאטיביים, הקהילה פיתחה ספריות כמו HashMap
שניתן להוסיף לפרויקט שלך כדי לספק פונקציונליות דומה עם ביצועים טובים יותר מגישה עשה זאת בעצמך. הספריות האלו לרוב מציעות אמצעי ניהול מערכים אסוציאטיביים אלגנטי ויעיל יותר, במיוחד עבור פרויקטים מורכבים יותר.