Part20:内包表記

希「ほな、内包表記の説明するで。内包表記ってのは、リストとかに使ってたmapとかfilterとかを簡単にかけるようにした構文や」

希「これはmapを使うと」

希「こう書いてたやつや」
海未「あまり変わらないようですね」
希「これだけだとな。この左のname <- ["うみ", "りん", "のぞ"]をgenerator、右のdo: name <> nameがcollectableって呼ぶ」
凛「なんで英語使うにゃ!」
希「生成器とか収集品とか言う方がええん?」
凛「・・・英語の方がましっぽいにゃ」
希「generatorは任意のEnumerableや。リストでもマップでも、自分で定義してEnumerableを実装した構造体でもええ」

凛「これ誰得にゃ?」
希「よく使う操作やから言語レベルでサポートしたって話やな。あと、パターンマッチングもできるしfliterも組み合わせられる」

希「パターンマッチングを使うとこんな感じや。マッチするやつだけcollectableに入るって寸法」
海未「たしかに、これだとmapだけではできませんね」
希「けどまあ、絞り込みならこっちの方がやりやすいかな」

希「このgrade == 2の部分をfilterって言って、これが真になるデータだけがcollectableに渡されるんや」
海未「filterとmapを組み合わせていたリスト処理を1文で書けるのですね。これは便利そうです」

希「generatorは複数書けるんや」

希「2年生組の取り得る全カップリング、と」
凛「優柔不断な海未ちゃんにはぴったりにゃ」
海未「ゆ、優柔不断とは何ですか。私は・・・」
希「私は?」
凛「私は?」
海未「・・・な、何でもありません!」
凛「ちぇー」

希「何も指定しないとリストに収まるけど、他の型にもできるんや」

希「intoで空マップを指定してやるとマップになる。マップやから、キー重複する分は後の方で上書きされて件数半分や」
凛「海未ちゃんが最高に幸せな組合せが残ったにゃ」
海未「わ、私は別に・・・」
希「intoにはCollectableプロトコルを実装したデータ構造なら何でも指定できる。正確には、intoで指定したマップなり何なりに結果が追加されるんや」

希「内包表記についてはこんなもんや。使いこなせれば便利そうやろ?」
凛「頭ひねれば色々応用できそうにゃ」

海未「次回ですが、シギルについて見てみます」
希「難しそうなところいくね」
海未「あとはメタプログラミング方面しか残っていませんから・・・」


LINEで送る
Pocket


返信を残す

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