Scala 无限循环

Scala infinite loop

所以我是 scala 的新手,根据我在网上发现的信息,scala 不会像其他语言那样更新变量。我试图在 while 循环中更改一个变量,但它似乎没有改变。我有一个可变的 ArrayBuffer,它保存着键值对,声明如下:

val array1 = mutable.ArrayBuffer[Option[IndexedSeq[(K,V)]]]()

它正在存储基于始终为 int 的“K”值排序的数组。我正在尝试通过以下方式遍历 array1 的层:

var i=0
var counter = 0
while(array1(i).isDefined){
    counter += 1
    i += 1}

然而,这会导致无限循环,我怀疑 i 没有改变,我不知道为什么。

当您使用像 Scala 这样的高级语言工作时,最好忘记很多低级 C 范例。它只会误导你。

如果你有一个可迭代的东西(例如 ArrayBufferList 或任何其他模糊暗示事物集合的东西),你可以用 [=20= 迭代它]

myArray.foreach { element => ... }

或者,如果您想从结果中构建一个新集合

val myNewArray = myArray.map { element => ... }

要根据任意条件删除一些元素,请考虑

val myNewArray = myArray.filter { element => ... }

“始终将其放入 while / for 循环”的方法非常以 C 语言为中心,在 Scala 中,我们有大量更高级别、更具表现力的工具来完成这项工作我们想做。 Scala 仍然 一个 while 循环,但你很少需要使用它,只是因为有很多内置函数可以为你表达常见的循环范式。

函数式程序员可以看看

val myNewArray = myArray.map { _ + 1 }

并立即看到“啊哈,我们正在迭代并通过向每个元素添加一个来创建一个新数组”,它把问题分解了很多。 C 风格的“等效”代码类似于

val myNewArray = ArrayBuffer()
var i = 0
while (i < myArray.size) {
  myNewArray += (myArray(i) + 1)
  i += 1
}

基本概念仍然相同:“为每个元素加一个”,但是这里还有 ton 多一点需要解析以了解代码的实际想法。此代码不会立即读取“向列表的元素添加一个”。上面写着“好吧,我们正在创建一个数组并使用一个局部变量,然后我们做了几次看起来像是在添加一个和...”