- Back to Home »
- Programming techniques »
- C/C++ Kỹ thuật sử dụng Array kết hợp với Enum
Saturday, May 2, 2015
Đối với Array đã được đề cập, để truy cập các phần tử cụ thể trong mảng thì cần phải nhớ vị trí của phần tử đó trong mảng. Phần này sẽ đề cập đến vấn đề làm thế nào để truy cập một phần tử cụ thể trong mảng theo ID (enum) một các dễ dàng.
1. Array
array-enum.c
#include <stdio.h>
enum {
COLOR_REG = 0,
COLOR_GREEN,
COLOR_BLUE
};
typedef struct{
char name_color[32];
int r;
int g;
int b;
}color_t;
color_t mycolor[] = {
[COLOR_BLUE] = {"blue", 0, 0, 255},
[COLOR_REG] = {"reg", 255, 0, 0},
[COLOR_GREEN] = {"green", 0, 255, 0},
};
void print_color(int color){
printf("color<%s>: r = %d, g = %d, b = %d \n",
mycolor[color].name_color,
mycolor[color].r,
mycolor[color].g,
mycolor[color].b
);
}
int main(int argc, char **argv)
{
print_color(COLOR_REG);
print_color(COLOR_GREEN);
print_color(COLOR_BLUE);
return 0;
}
Compile & Execute
$ gcc array-enum.c
$ ./a.out
color<reg>: r = 255, g = 0, b = 0
color<green>: r = 0, g = 255, b = 0
color<blue>: r = 0, g = 0, b = 255
Như ví dụ trên, mảng mycolor[] có các phần tử được khai báo theo các ID đặt trong [ ], giá trị các field đặt trong { }, không cần quan tâm thứ tự của các phần tử trong mảng, các khai báo dưới đây là tương đương:
color_t mycolor[] = {
[COLOR_BLUE] = {"blue", 0, 0, 255},
[COLOR_REG] = {"reg", 255, 0, 0},
[COLOR_GREEN] = {"green", 0, 255, 0},
};
color_t mycolor[] = {
[COLOR_REG] = {"reg", 255, 0, 0},
[COLOR_BLUE] = {"blue", 0, 0, 255},
[COLOR_GREEN] = {"green", 0, 255, 0},
};
color_t mycolor[] = {
[COLOR_GREEN] = {"green", 0, 255, 0},
[COLOR_BLUE] = {"blue", 0, 0, 255},
[COLOR_REG] = {"reg", 255, 0, 0},
};
Truy cập phần tử mảng theo ID
mycolor[COLOR_REG]
mycolor[COLOR_GREEN]
mycolor[COLOR_BLUE]
2. map (C++)
Trong C++ cũng có cách để truy cập phần tử trong mảng bằng ID, được định nghĩa trong map containers, xem chi tiết tại đây.