从文件中读取星星2016 年 Facebook 黑客杯 https://www.facebook.com/hackercup/problem/910374079035613/Boomerang Constellations问题,可以定义以下扩展函数:
fun BufferedReader.readStars(n: Int): Set<Star> {
return Array(n) {
val (l1, l2) = readLine().split(" ").map { it.toInt() }
Star(l1, l2)
}.toHashSet()
}
代码很紧凑,但值首先读入数组,然后转换为HashSet
。有没有办法直接初始化HashSet
大小为n
Kotlin 中的初始化函数?
UPDATE:有没有一个existing标准 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)) }
}
Usage:
createHashSet<Star>(n) {
val (l1, l2) = readLine()!!.split(' ').map { it.toInt() }
Star(l1, l2)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)