是下面的代码更好的功能成语的替代方法吗?即是否有一种更整洁的方法来获得值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)