上课时,我必须编写一个计算生日问题的程序
现在,我尝试同时学习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()

10-06 06:17