簡體   English   中英

Arduino IDE 內的查找表或類似表?

[英]Lookup table or similar within the Arduino IDE?

再會,

我在 ESP32 上收到的用戶 ID 為 integer,我想將它們轉換為相應的名稱。 目前我用 switch 語句解決這個問題,如下所示。 有更優雅的解決方案嗎?

   String ReturnName(int userId) {
      Switch(userId) {
      case 20:
        {
          return "John";
        }
        break;
      case 44:
        {
          return "Maria";
        }
        break;
      case 4:
        {
          return "Herrensen";
        }
        break;
      }
    }

首先,返回后休息沒有意義。 刪除它們。

  Switch(userId) {
  case 4:  return "Herrensen";
  case 20: return "John";
  case 44: return "Maria";
  }

恕我直言,這還不錯。

或者,您可以使用數組。

const char* lut[45];
lut[20] = "John";
lut[44] = "Maria";
lut[4] = "Herrensen";

但是 memory 如果您沒有連續的用戶 ID,這不是很有效。 目前你已經為 45 個指針保留了 memory 但只使用了 3 個所以大部分 memory 都被浪費了。 並且您必須確保僅索引數組中的有效元素。

您可以使用 hash 表,但由於 memory 有限,這在 Arduino 上通常不是一個好主意。

對於 ESP32 目標,您可以考慮使用 std::map

#include <map>
std::map<byte, const char*> list;

void setup() {
  list[4] = "Anna";
  list[20]= "John"; 
  Serial.begin(115200);

  for (auto const & n : list) {
    Serial.print(n.first); Serial.print(":"); Serial.println(n.second);
  }
}

ESP 在 RAM 和 c++ stdlib 中的限制不如真正的 Arduino

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM