MW211 EXIT

devlog
C言語/連想配列的定数のようなもの
2013年05月12日
連想配列を実装していないC言語において、
連想配列的定数のような、データベースの定数テーブル的なものを代用する処理。

まず、構造体を決める。列はいくつでもOK。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    int    id;                                                              │
│    char*  name;                                                            │
│} DEF;                                                                      │
└──────────────────────────────────────┘

次に値を設定する。グローバル変数(配列)として先頭で定義してしまう感じか。
┌──────────────────────────────────────┐
│DEF gDef[] = {                                                              │
│    { 1,"北海道"},                                                          │
│    { 2,"青森県"},                                                          │
│    { 3,"岩手県"},                                                          │
│};                                                                          │
└──────────────────────────────────────┘

これを「id」指定で取得する関数をつくる。
┌──────────────────────────────────────┐
│DEF*  getDef(int  id) {                                                     │
│    for (int i = 0; i < (sizeof(gDef) / sizeof(gDef[0])); i++) {            │
│        if (gDef[i].id == id) {                                             │
│            return &gDef[i];                                                │
│        }                                                                   │
│    }                                                                       │
│    // 該当なしはNULLを返す                                                 │
│    return NULL;                                                            │
│}                                                                           │
└──────────────────────────────────────┘

ま、こんな感じで必要に応じて、関数をアレンジしつつ実装していくことになる。
switch-case文の雨あられよりは大分ましになるだろう。
分類:C/C++