是下面的代码更好的功能成语的替代方法吗?即是否有一种更整洁的方法来获得值j,而不必使用var?

var j = i + 1
while (j < idxs.length && idxs(j) == x) j += 1

最佳答案

val j = idxs.drop(i).indexWhere(_ != x) + i


或者,如@kosii在评论中所建议,使用indexWhere重载,该重载从开始搜索的位置获取索引:

val j = idxs.indexWhere(_ != x, i)


编辑

如果j之后的所有项目都等于idxs,则i必须等于x的长度:

val index = idxs.indexWhere(_ != x, i)
val j = if(index < 0) idxs.length else index

// or

val j = if (idxs.drop(i).forall(_ == x)) idxs.length
        else idxs.indexWhere(_ != x, i)

10-08 12:39