komoto / エンジニアブログ

プログラミングについてアウトプットします。

連想配列を条件分岐で使う

私がプログラミングを学び始めた当初、連想配列の使い所が分かりませんでした。

現在もまだあまりわかっていませんが、連想配列の使い所の参考になれば嬉しいです。

連想配列とは

連想配列とは、キーとそのキーに対応した値を格納した配列のことです。

言語によっては「辞書」とも呼ばれます。

通常の配列では、値を取り出す時はインデックスを使いますが、連想配列ではキーと呼ばれるものを使います。

詳しくは以下のサイトを参考にしてください。

techacademy.jp

例えば、次のような宣言をしたとします。(以下、Pythonで書きます。)

dict = {"リンゴ" : 100, "キャベツ" : 150}

配列と違い宣言には、{ }を使います。(通常の配列は[ ]を使う言語が多いと感じます)

そして、キーから値を取り出すには次のようにします。

apple_price = dict["リンゴ"] #apple_priceには100が格納されます
kyabetsu_price = dict["キャベツ"] #kyabetsu_priceには150が格納されます

では、本題に移ります。

制御構文(if, Switchなど)での条件分岐

連想配列を条件分岐で使う利点はコードがシンプルで読みやすくなること(可読性向上)と、条件を追加しやすくなること(拡張性、保守性向上)です。

例えば、食物を買おうとする客が1000円出した際に、そのお釣りを求め表示したいとしましょう。

そうするとifで書くと一例として次のようになると思います。

food = input() #input()は標準入力の関数 ここでは「リンゴ」や「キャベツ」など商品名を入力するとする
oturi = 1000
if food == "リンゴ":
    oturi = oturi - 100
elif food == "キャベツ"
    oturi = oturi - 150
print(oturi)

これを連想配列で書くと

name2price = { #食品名と値段の対応表
    "リンゴ" : 100, 
    "キャベツ" : 150
    } 

food = input() #input()は標準入力の関数 ここでは「リンゴ」や「キャベツ」など商品名を入力するとする
oturi = 1000
oturi = oturi - name2price[food]
print(oturi)

となります。 2つくらいであればまだifやswitchで書けるのですが、数が多くなってくると大変なことになります。

ここから2つ増やすだけでも

#ifの場合
food = input() #input()は標準入力の関数 ここでは「リンゴ」や「キャベツ」など商品名を入力する想定
oturi = 1000
if food == "リンゴ":
    oturi = oturi - 100
elif food == "キャベツ":
    oturi = oturi - 150
elif food == "きゅうり":
    oturi = oturi - 50
elif food == "もやし":
    oturi = oturi - 10
print(oturi)

#------------------------------------------

#連想配列の場合
name2price = { #食品名と値段の対応表
    "リンゴ" : 100, 
    "キャベツ" : 150,
    "きゅうり" : 50,
    "もやし" : 10,
    } 

food = input() #input()は標準入力の関数 ここでは「リンゴ」や「キャベツ」など商品名を入力するとする
oturi = 1000
oturi = oturi - name2price[food]
print(oturi)

となり、連想配列を使うことでコードが美しくなることがわかると思います。

以上、何かの参考になれば幸いです。

コーディングに慣れてくるまでは、とにかく動くコードを書くことが大切です。
しかし、ある程度慣れてきたら他に効率よくコーディングする方法がないか考えることがさらに大切になります。
私も常に考えてはいるのですが、まだまだなかなかうまくいかないですが...
でも焦らず頑張っていこうと思います。

ちなみに余談ですが

oturi = oturi - ○○の箇所はすべてoturi -= ○○

という風にも書けます。