查找列表中验证条件的第一个元素

Ant*_*ica 3 kotlin

假设我们给出一个整数列表R = [3,5,3,6,0,6,7]、一个阈值x(整数)和一个窗口大小(整数)p。例如,x=4,p=2。

我需要找到第一个t验证以下条件的索引:

  • R[t] >= 4, R[t+1] >= 4。由于 p=2,我们只需要验证两个框t和t+1。如果p等于,3我们需要验证t、t+1和t+2。

这里t我要寻找的是5(索引从0开始)。

如何在 Kotlin 中以优雅的方式编写此代码(而不是在元素上循环)。

给出错误的尝试(x=4 且 p = 2。输出应为 3,因为我们从 0 开始索引):

val numbers = listOf(1, 2, 3, 4, 6, 8, 2)
val firstIndex = numbers.find { it >= 4 for it in it..it+2-1}
Run Code Online (Sandbox Code Playgroud)

Мих*_*аль 5

val numbers = listOf(1, 2, 3, 4, 6, 8, 2)
val p = 2
val x = 4

val t = numbers.windowed(p).indexOfFirst { window -> window.all { it >= x } } // t == 3
Run Code Online (Sandbox Code Playgroud)

t-1如果没有找到匹配项,则等于