How do I implement reverse enumeration? Basically I'm trying to output a string based upon a value in an array, the following code is what I have come up with to achieve my desired result, but I have a feeling that there is a better way to do it.

String day(int day) {
  if (day == 1) return "Sunday";      
  if (day == 2) return "Monday";
  if (day == 3) return "Tuesday";
  if (day == 4) return "Wednesday";
  if (day == 5) return "Thursday";
  if (day == 6) return "Friday";
  if (day == 7) return "Saturday";
  else return "Undefined";
}

void setup() {
  Serial.begin(57600);
  while (!Serial);
  Serial.println(day(1));
}

void loop() {
;
}


This prints "Sunday" in the Serial monitor

I would appreciate any input on how to optimize this code, thank you!
My method makes use of the __FlashStringHelper class:

// For convenience:
typedef const __FlashStringHelper *FlashString;


FlashString reverseEnum(int val) {
    switch (val) {
        case 0: return F("Option zero");
        case 1: return F("Option one");
        case 2: return F("Option two");
        default: return F("Invalid Enum");
    }
}


Printing now is as simple as:

Serial.println(reverseEnum(2));


Because it's a "flash string" the print function is overloaded properly and it performs the proper PROGMEM reading.

You can, of course, assign to a FlashString:

FlashString myString = reverseEnum(2);
Serial.println(myString);


Or if you don't want to use a typedef you can use the raw type:

const __FlashStringHelper *myString = reverseEnum(2);
Serial.println(myString);


It's just much cleaner to use a typedef.