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 范例。它只会误导你。
如果你有一个可迭代的东西(例如 ArrayBuffer
、List
或任何其他模糊暗示事物集合的东西),你可以用 [=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 多一点需要解析以了解代码的实际想法。此代码不会立即读取“向列表的元素添加一个”。上面写着“好吧,我们正在创建一个数组并使用一个局部变量,然后我们做了几次看起来像是在添加一个和...”
所以我是 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 范例。它只会误导你。
如果你有一个可迭代的东西(例如 ArrayBuffer
、List
或任何其他模糊暗示事物集合的东西),你可以用 [=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 多一点需要解析以了解代码的实际想法。此代码不会立即读取“向列表的元素添加一个”。上面写着“好吧,我们正在创建一个数组并使用一个局部变量,然后我们做了几次看起来像是在添加一个和...”