gpt4 book ai didi

kotlin - 有没有办法在 Kotlin 中构造带有初始化函数的 HashSet?

转载 作者:IT老高 更新时间:2023-10-28 13:46:33 25 4
gpt4 key购买 nike

Facebook Hacker Cup's 2016 中的文件中读取星星Boomerang Constelations 问题,可以定义如下扩展函数:

fun BufferedReader.readStars(n: Int): Set<Star> {
return Array(n) {
val (l1, l2) = readLine().split(" ").map { it.toInt() }
Star(l1, l2)
}.toHashSet()
}

代码是紧凑的,但值首先被读入数组,然后转换为 HashSet。有没有办法直接初始化一个 n 大小的 HashSet 和 Kotlin 中的初始化函数?

更新:标准 Kotlin 库中有现有方法吗?

最佳答案

您总是可以使用 apply 就地初始化对象:

HashSet<Star>(n).apply {
repeat(n) {
val (l1, l2) = readLine()!!.split(' ').map { it.toInt() }
put(Star(l1, l2))
}
}

如果每次都打字太不方便,写一个扩展函数:

inline fun <T> createHashSet(n : Int, crossinline fn: (Int) -> T) = HashSet<T>(n).apply {
repeat(n) { add(fn(it)) }
}

用法:

createHashSet<Star>(n) {
val (l1, l2) = readLine()!!.split(' ').map { it.toInt() }
Star(l1, l2)
}

关于kotlin - 有没有办法在 Kotlin 中构造带有初始化函数的 HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com