こんにちは、コンテンツクリエイターのともすけです。
この記事は、paizaラーニングのレベルアップ問題集を利用した学習結果を記録しています。
paiza(パイザ)ラーニング は、動画を使ったオンラインのプログラミング入門学習コンテンツです。
https://paiza.jp/guide/works
順不同で解いていきます。ここに掲載する内容は、
- paizaから「回答コード転載可」とされた問題
- 筆者が解いたコード
- 簡単な説明
です。なお、あくまで筆者の学習記録がメインであるので「はじめてのKotlin」のようなわかりやすさは考慮していません。ご了承ください。
今回の問題は?
これです。
はい、いきなり構造体です。筆者はKotlin初心者なので、Kotlinに構造体(struct)があるかを把握できていませんが、それっぽい情報を見つけてきてコードを書いてみました。
なお、問題の詳細は上記リンクを踏んでいただくとして、さらっと内容を書くと以下のようになります。
連想配列であそぶ問題
へぇ〜こういう書き方すると、データ管理しやすくなるんだ〜
のように捉えてもらえると嬉しいです。なお掲載コードは最適解ではありません。
コードと解説
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 構造体 (1) data class Student( val name: String, val old: Int, val birth: String, val state: String ) // メイン関数 fun main(){ val n = readLine()!!.toInt() // (2) var dataMap = mutableMapOf<Int, Student>() // (3) for(i in 1..n){ var argList = readLine()!!.split(" ") // (4) var old: Int = argList[1].toInt() dataMap[old] = Student(argList[0], argList[1].toInt(), argList[2], argList[3]) // (5) } val expOld = readLine()!!.toInt() // (6) println(dataMap[expOld]!!.name) // (7) } |
前提:入力の塊は “3” あります。
(1)構造体です。”data class $name” のように定義するらしいです。
(2)問題の入力セット数を取得
(3)構造体を利用した連想配列を定義
mutableMapOf()という関数を利用します。連想配列としては、「年齢」をキーとして、その年齢に該当する「データセット」を構造体(Student)に割り当てています。
(4)入力データセットを読み込む(スペース区切りのデータ。詳しくは記事冒頭のpaiza問題集へのリンクを踏んでください)。(2)で取得した数分のデータセットをここのループで取り込みます。
(5)連想配列「dataMap」にデータセットを登録。キーにoldを割り当てています。
(6)ループ文で取り込んだデータセットから、nameを知りたい年齢値を取得して変数expOldに格納します。
(7)連想配列「dataMap」に年齢値expOldを渡し、その中のnameを取りだして表示して終わり。
おわりに
今回この記事を書いたのには理由がありまして、それは「連想配列を書きたいのにわかりやすい具体例がググってもサクッと出てこなかった」からに他なりません。
IT業界などではKotlin需要が多いようです。さまざまな言語を利用してきた筆者には「クセのある言語」ですが、ある程度かけるようになると稼ぐ力にもなりそうです。
プログラミング、学んでみませんか?
それではまた