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
, которые можно добавить в ваш проект, чтобы предоставить аналогичную функциональность с лучшей производительностью, чем подход «сделай сам». Эти библиотеки обычно предлагают более изящные и эффективные средства управления ассоциативными массивами, особенно для более сложных проектов.