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 的库,可以添加到你的项目中,提供与自己动手做相比更好的性能的类似功能。这些库通常提供了一种更优雅、更高效的管理关联数组的方法,特别是对于更复杂的项目。