Использование ассоциативных массивов

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