Arduino:
Використання асоціативних масивів
Як це зробити:
Суворо кажучи, 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("Температура в Лос-Анджелесі: ");
Serial.println(temperatures[i].temperature);
}
}
}
void loop() {
// Тут поки що нічого немає.
}
Запуск цього коду дасть вам наступний результат:
Температура в Лос-Анджелесі: 22.0
Поглиблене вивчення
Історично, мови програмування такі як C та C++ (з яких походить синтаксис Arduino) не мали вбудованих асоціативних масивів, що призводило до використання обхідних шляхів, як показано вище. Такий підхід є відносно простим, але погано масштабується при збільшенні розміру даних через його час пошуку O(n).
Мови, такі як Python, пропонують словники, а JavaScript має об’єкти для цієї цілі, обидва з яких набагато ефективніші для керування парами ключ-значення. У Arduino, коли продуктивність і ефективність стають критичними, розробники можуть вибирати більш спеціалізовані структури даних, як-от хеш-таблиці, реалізовані через бібліотеки.
Хоча Arduino нативно не підтримує асоціативні масиви, спільнота розробила бібліотеки, такі як HashMap
, які можна додати до вашого проекту, щоб забезпечити подібну функціональність з кращою продуктивністю, ніж підхід “зроби сам”. Ці бібліотеки, як правило, пропонують більш елегантні та ефективні способи керування асоціативними масивами, особливо для більш складних проектів.