我有一個 Scala 元組串列,“params”,大小為 28。我想遍歷并列印串列中的每個元素,但是,沒有列印出任何內容。完成 for 回圈后,我檢查了串列的大小,現在變為 0。
我是 Scala 的新手,經過長時間的谷歌搜索后我無法弄清楚。
val primes = List(11, 13, 17, 19, 2, 3, 5, 7)
val params = primes.combinations(2)
println(params.size)
for (param <- params) {
print(param(0), param(1))
}
println(params.size)
uj5u.com熱心網友回復:
combinationsList 中的方法創建一個Iterator. 一旦Iterator使用諸如 之類的方法消耗size,它將為空。
從檔案
在呼叫一個方法之后永遠不應該使用迭代器。
如果您注釋掉println(params.size),您可以看到 for 回圈正在列印元素,但最后一個println(params.size)將保持為 0。
uj5u.com熱心網友回復:
primes.combinations(2) 回傳迭代器。
迭代器是允許迭代一系列元素的資料結構。它們有一個 hasNext 方法用于檢查是否有可用的下一個元素,還有一個 next 方法回傳下一個元素并將其從迭代器中丟棄。
所以,它就像指向 Iterable 集合的指標。完成迭代后,您將無法再進行迭代。
當println(params.size)執行該時間迭代在計算時完成size,現在 params 指向結束。因此,這for (param <- params)將等效于圍繞空集合進行回圈。
有兩種可能的解決方案:
- 在 for 回圈之前不要檢查大小。
- 將迭代器轉換為 Iterable 例如串列。
params = primes.combinations(2).toList
要了解有關 Iterator 和 Iterable 的更多資訊,請參閱Iterable 和 Iterable 之間的關系是什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358547.html
