直訳するなら, こうなるでしょう:
Kotlin
1val items = arrayOf(
2 mapOf(
3 "name" to "kato",
4 "age" to 10),
5 mapOf(
6 "name" to "tanaka",
7 "age" to 11))
8val names = mutableSetOf<String>()
9val ages = mutableSetOf<Int>()
10for(item in items) {
11 val name = item["name"] as? String
12 if(name == null) throw Exception("キー name が存在しないか, 文字列じゃない")
13 names.add(name)
14 val age = item["age"] as? Int
15 if(age == null) throw Exception("キー age が存在しないか, 整数じゃない")
16 ages.add(age)
17}
Iterable などを使うなら:
Kotlin
1val items = arrayOf(
2 mapOf(
3 "name" to "kato",
4 "age" to 10),
5 mapOf(
6 "name" to "tanaka",
7 "age" to 11))
8val names = items.map {
9 it["name"] as? String ?: throw Exception("キー name が存在しないか, 文字列じゃない")
10}
11val ages = items.map {
12 it["age"] as? Int ?: throw Exception("キー age が存在しないか, 整数じゃない")
13}
…が, Kotlin の場合は形式が固定のデータ構造には連想配列を使わず,
それぞれクラスを作るほうが結果的に楽になるのではないでしょうか.
Kotlin
1public data class Person(
2 val name: String,
3 val age: Int)
Kotlin
1val items = arrayOf(
2 Person("kato", 10),
3 Person("tanaka", 11))
4val names = items.map { it.name }
5val ages = items.map {it.age }
キーが無い・キーはあるけど型が違う…などのチェックを
(入力・読込・通信などの時はともかく, 実処理上では) 行う必要がなくなります.
また IDE のサポートも受けやすいです.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/15 12:12 編集