열거 형 값이 충분히 빽빽한 경우 문자열을 보유 할 배열을 정의한 다음이를 찾은 다음 건너 뛴 값에 NULL을 사용하고 조회 루틴에 특수 사례 처리기를 추가 할 수 있습니다.
char *DogList[] = {
"vizsla", /* element 0 */
NULL,
NULL,
NULL,
"terrier", /* element 3 */
...
};
이렇게하면 스파 스 열거에 비효율적입니다.
열거 형이 빽빽하지 않더라도 매핑을 유지하기 위해 구조체 배열을 사용할 수 있습니다.
typedef struct DogMaps {
DogType index;
char * name;
} DogMapt;
DogMapt DogMap[] = {
{kVizsla, "vizsla"},
{kTerrier, "terrier"},
{kYellowLab, "yellow lab"},
NULL
};
두 번째 접근 방식은 매우 유연하지만 데이터를 사용해야 할 때마다 매핑을 통한 검색을 의미합니다. 큰 데이터 세트의 경우 배열 대신 b- 트리 또는 해시를 고려하십시오.
두 가지 방법 모두 일반화하여 더 많은 데이터를 연결할 수 있습니다. 첫 번째에서는 구조체의 배열을 사용하고 두 번째 구조체에서는 구조체에 멤버를 더 추가합니다.
물론 이러한 데이터 구조와의 상호 작용을 단순화하기 위해 다양한 핸들러를 작성하고자합니다.
@Hershi 모든 코드와 데이터를 분리하십시오. 위의 예는 기능적 이라기보다는 명확한 의미입니다.
당신이 보여주는 구조화 된 입력이 아닌 공백으로 분리 된 플랫 파일을 여전히 사용하고 있음을 인정하지만 필자의 프로덕션 코드는 가능한 한 많은 외부 소스의 데이터를 읽습니다.
잠깐, 코드 생성을 의미하는 것으로 보입니다.
확실히. 그게 잘못된 것은 아닙니다.
나는 생각한다, ... 영업 이익은 생성 된 코드가 어떻게 보일지에 관심이 있다고 생각