Part8:マップ

凛「マップにゃ。リストとかタプルみたいなデータの集まりなんだけど、順序がないのと、データに見出しを付けられるのが特徴だよ」

凛「辞書みたいなものだにゃ」
海未「これだと、名前に学年を紐付けているのですね」
凛「そうにゃ。名前の方をキー、学年の方を値って呼ぶよ」

凛「こうやって、[]でキーを指定すると値が取れるにゃ。キーがアトムだったら2行目みたいな書き方もありだよ」
希「同じキーが2つあったらどうなるん?」
凛「キーの重複はできない仕様で、後から書いた方の勝ちにゃ」

希「留年する気かいな・・・」
凛「凛、オトノキ大好きだもん!」
希「留年生を出した時点でμ’sの評判地に落ちるで?」
凛「はっ、そうだったにゃ。というかまず絵里ちゃんに殺されそうだにゃ」

凛「リストとかタプルと同じで、データ型は何でも使えるよ」

海未「マップもリストもタプルもこのあたり自由すぎて、気を抜くと混乱を招きそうですね。しっかりコードを律さないと」
希「大勢で開発する場合は特に、やね」

凛「値の更新はこうだよ」

凛「留年はとりあえず置いておくにゃ。更新操作をした後でも、map1の内容が変わってないのがポイントだよ」
海未「2行目はmap1を更新しているのではなくて、新しいmap2を作っているのですね」
凛「Elixirでは基本的にデータは不変にゃ」

凛「ちょっとややこしいんだけど、さっきのマップは別の書き方ができるにゃ」

凛「この2つは同じ意味にゃ」
希「えーと、なんとなくは、分かるんやけど・・・」
凛「この例だとキーは全部アトムだよね。その場合、下の書き方みたいに少し短く書けるんだよ」
海未「意味合い的にも、マップのキーはアトムにするのがよさそうですね」
凛「ケースバイケースだけど、大体はそうだと思うにゃ」

凛「マップにも便利な関数はたーくさんあるんだけど、少しだけ紹介するね」

凛「1つ目は簡単にゃ。Dict.sizeはマップの要素数を返す関数だよ」
希「タプルと同じで数は決まってるから関数名はsizeやね」
凛「2つ目のDict.keysは、キーだけをリストにして返してくれるにゃ。ただしここで注意点が。海未ちゃん、わかるかにゃ?」
海未「ええと・・・マップは順序の概念がない、ということは、Dict.keysの結果はどういう順番になるか分からない、ということでしょうか」
凛「・・・優秀な生徒を持って先生は満足であるぞ」
希「凛ちゃん、海未ちゃんにマウント取りに行くの諦めた方がええで」
凛「はぅ・・・気を取り直して3つ目にゃ。Dict.splitはマップを分割する関数だけど、キーが第2引数のリストにあるかないかでより分けてるんだよ」
希「結果はえーと、これマップのタプルかいな。どっちも{}やしこうして見るとややこしいな」
海未「リストにある:umiと:nozomiが1つ目のマップ、リストにない:rinが2つ目のマップに入るわけですね」
凛「分割でもいいし、単に欲しい部分だけ抜き出す目的で使ってもいいにゃ」

海未「では次回は私がデータ型の最後、キーワードリストの説明をします」
凛「いよいよ大詰めかな?」
海未「まだデータ型の最後なだけです。制御構造やパターンマッチングも覚えないとちゃんとしたプログラムは書けませんよ」
凛「・・・頑張るにゃ~」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です