구조 배열을 그런 식으로 정의하여 검색 작업을 쉽게 수행 할 수 있고 열거 형 값을 사용하여 문자열을 검색 할 수 있습니다. 예를 들어C에서 구조체 배열 인덱싱
이 같은 배열을 정의
enum MY_ENUM {
MY_ENUM_VAL = 0,
MY_ENUM_VAL_8 = 8,
MY_ENUM_VAL_50 = 50,
MY_ENUM_VAL_200 = 200,
MY_ENUM_VAL_565 = 565,
};
struct my_struct {
int val;
char *str;
};
/* Struct array */
struct my_struct my_struct_array[] = {
{ MY_ENUM_VAL, "str0" },
{ MY_ENUM_VAL_8, "str8" },
{ MY_ENUM_VAL_50, "str50" },
{ MY_ENUM_VAL200, "str200" },
{ MY_ENUM_VAL_565, "str565" },
};
장점은 내가 검색 작업을 수행 할 수 있습니다 내가 배열의 모든 값을 찾을 수없는 경우도 나는 몇 가지 기본 값을 할당 할 수 있다는 것입니다. 그러나 내가 지수는 아래 그럼 내가 검색 작업을 수행 할 수 없습니다와 같은 열거 값을 기준으로하면
char *str50 = my_struct_array[MY_ENUM_VAL50].str; // this won't work.
같은 열거 값을 사용하여 일부 문자열을 찾으려면 무엇을. 또한 300과 같은 임의의 값이 있으면 쓰레기 값을 얻을 수 있습니다.
/* String array */
const char *my_string_array[] = {
[MY_ENUM_VAL] = "str0",
[MY_ENUM_VAL_8] = "str8",
[MY_ENUM_VAL_50] = "str50",
[MY_ENUM_VAL200] = "str200",
[MY_ENUM_VAL_565] = "str565",
};
위의 두 가지 작업을 모두 수행 할 수 있도록 배열을 정의하는 가장 좋은 방법은 무엇입니까?
* "하지만 열거 형 값을 사용하여 문자열을 찾고 싶다면 ..."* - 간단하고 단순 할 수는 없습니다. 그건 기본 배열이 정의 된 방법이 아니야. 물론 566 개의 포인터 배열을 세울 수 있지만 "기본 값"으로 초기화되고 나머지는 특정 문자열로 설정됩니다. 정교하고 (명백한) 저장 장치 및 초기화 설정 비용으로 직접 검색보다 더 나은 성능을 얻지 못할 것입니다. 즉, 이것이 어떻게 든 코드의 중요한 성능 경로라면, 와우. – WhozCraig