- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Kotlin/4つ要素以上のタプルを作りたい へ行く。
- 1 (2023-06-09 (金) 18:05:20)
- 2 (2023-06-09 (金) 19:06:00)
- 3 (2023-06-14 (水) 11:09:14)
- 4 (2023-06-16 (金) 21:30:19)
- 5 (2023-06-16 (金) 21:30:19)
キーワード†
- Kotlin
- Tuple
したいこと†
PairやTripleはあるが4つ5つの要素のタプルがないので作りたい。
どうやって†
次のようにtypealiasと拡張プロパティでそれっぽくできる。 が、分解宣言できないので、素直にデータクラス作るのがよいかもしれない。
typealias KTuple4<A, B, C, D> = Pair<Pair<Pair<A, B>, C>, D>
typealias KTuple5<A, B, C, D, E> = Pair<Pair<Pair<Pair<A, B>, C>, D>, E>
@Suppress("UNUSED", "FunctionName")
fun <A, B, C, D> KTuple(a: A, b: B, c: C, d: D): KTuple4<A, B, C, D> = a to b to c to d
@Suppress("UNUSED", "FunctionName")
fun <A, B, C, D, E> KTuple(a: A, b: B, c: C, d: D, e: E): KTuple5<A, B, C, D, E> = a to b to c to d to e
val <A, B, C, D> KTuple4<A, B, C, D>.t1
@JvmName("tuple4t1")
get() = first.first.first
val <A, B, C, D> KTuple4<A, B, C, D>.t2
@JvmName("tuple4t2")
get() = first.first.second
val <A, B, C, D> KTuple4<A, B, C, D>.t3
@JvmName("tuple4t3")
get() = first.second
val <A, B, C, D> KTuple4<A, B, C, D>.t4
@JvmName("tuple4t4")
get() = second
val <A, B, C, D, E> KTuple5<A, B, C, D, E>.t1
@JvmName("tuple5t1")
get() = first.first.first.first
val <A, B, C, D, E> KTuple5<A, B, C, D, E>.t2
@JvmName("tuple5t2")
get() = first.first.first.second
val <A, B, C, D, E> KTuple5<A, B, C, D, E>.t3
@JvmName("tuple5t3")
get() = first.first.second
val <A, B, C, D, E> KTuple5<A, B, C, D, E>.t4
@JvmName("tuple5t4")
get() = first.second
val <A, B, C, D, E> KTuple5<A, B, C, D, E>.t5
@JvmName("tuple5t5")
get() = second
つくりかた†
KTuple(1, 1.0, "1", true)
または
1 to 1.0 to "1" to true