上课时,我必须编写一个计算生日问题的程序
现在,我尝试同时学习kotlin,并且遇到了一些代码片段:
val checkSet = mutableSetOf<Int>()
generateSequence{ Random.nextInt(n)}.forEach {
if(!checkSet.add(it)) {
return@outForeach
}
}
outForeach@
sum += checkSet.size
如您所见,我正在尝试以无限顺序执行此操作。 Kotlin不接受此,因为outForeach是一个 Unresolved reference 。但这也不起作用:
val checkSet = mutableSetOf<Int>()
generateSequence{ Random.nextInt(n)}.forEach {
if(!checkSet.add(it)) {
return@forEach
}
}
sum += checkSet.size
这只会再次开始forEach循环。有没有办法将某种东西实现为forEachUntil?
ps我知道这看起来很像以下问题:'return' doesn't jump out of forEach in Kotlin只是我没有真正得到答案,也不知道它是否适用于此。另外一种实现forEachUntil的方法对我来说似乎更加优雅
最佳答案
我想我自己找到了解决方案:
val checkSet = mutableSetOf<Int>()
generateSequence{ Random.nextInt(n)}.first { !checkSet.add(it) }
sum += checkSet.size
基本上使用函数first()并保持返回false,直到您想退出循环。只需删除函数的返回first()