Scala 斯卡拉。需要迭代返回不断增长列表的循环

Scala 斯卡拉。需要迭代返回不断增长列表的循环,scala,Scala,我有一个函数,它接受一个值并返回一个对列表pairUp 还有一套钥匙,flightPass.keys 我想编写一个for循环,为flightPass.keys的每个值运行pairUp,并返回所有这些返回值的大列表 val result:List[(Int, Int)] = pairUp(flightPass.keys.toSeq(0)).toList for (flight<- flightPass.keys.toSeq.drop(1)) {val result:List[(Int, In

我有一个函数,它接受一个值并返回一个对列表pairUp

还有一套钥匙,flightPass.keys

我想编写一个for循环,为flightPass.keys的每个值运行pairUp,并返回所有这些返回值的大列表

val result:List[(Int, Int)] = pairUp(flightPass.keys.toSeq(0)).toList
for (flight<- flightPass.keys.toSeq.drop(1))
{val result:List[(Int, Int)] = result ++ pairUp(flight).toList}
val结果:List[(Int,Int)]=pairUp(flightPass.keys.toSeq(0)).toList

对于(flight首先,您将
结果
定义为
val
,这意味着它是不可变的,不能修改

因此,如果您想为
flightPass.keys
的每个值应用“
pairUp
”,为什么不
map()


首先,您将
result
定义为
val
,这意味着它是不可变的,不能修改

因此,如果您想为
flightPass.keys
的每个值应用“
pairUp
”,为什么不
map()


Scala方法将值列表转换为列表列表,然后将其缩减为单个列表,称为
flatMap
,它是map then flatten的缩写。您可以这样使用它:

flightPass.keys.toSeq.flatMap(k => pairUp(k))

这将从
flightPass.keys
中获取每个“键”,并将其传递给
pairUp
(映射部分),然后从每次调用
pairUp
中获取生成的
List
s,并将其“展平”,从而生成一个连接的列表。

一种Scala方法称为
flatMap
,它是map然后展平的缩写。您可以这样使用它:

>
flightPass.keys.toSeq.flatMap(k => pairUp(k))

这将从
flightPass.keys
中获取每个“键”,并将其传递给
pairUp
(映射部分),然后从每次调用
pairUp
得到的
List
s并“展平”它们,生成一个单一的连接列表。

我认为可能存在某种缓冲区限制。result.length的值为933,但flightPass.keys.length更长。或者这与此无关?这就是为什么我开始胡闹可怕的for循环@MatthewIrwin,933不是很大,除非你在一台内存有限的小型计算机上工作。如果没有对错误的充分描述,很难解决问题。你可以在提取密钥时添加
.toIterator
。这样
result
将是一个
迭代器,占用很少的内存。它将每次只在请求时对每个键进行t和处理。每个pairUp返回一个包含大约5000个条目的列表。因此,当我从flightPass.keys中删除X amount时,最终结果中会包含大约500万对数字。result.length也会缩小。因此,这可能不是一个错误,只是将flightPass.keys更改为flightPass.Key迭代器修复了它。以前从来没有特别需要过。我使用的计算机相当结实。谢谢你的帮助。我认为可能存在某种缓冲区限制。result.length的值为933,但flightPass.keys.length更长。或者这与此无关?这就是为什么我开始胡闹的原因loops@MatthewIrwin,933不是很大,除非你在内存有限的小型计算机上工作。如果没有对错误的充分描述,很难解决问题。你可以在提取密钥时添加
.toIterator
。这样
结果
将是一个
迭代器,占用很少的内存。它将提取并处理每次按一个键并仅在请求时按一个键。每个pairUp返回一个包含大约5000个条目的列表。因此,最终结果将包含大约500万对数字。当我从flightPass.keys中删除X amount时,result.length也会缩小。因此,这可能不是一个错误,只是将flightPass.keys更改为flightPass.keysIterator修复了它。以前从未专门需要过。我使用的电脑相当结实。谢谢你的帮助
flightPass.keys.toSeq.flatMap(k => pairUp(k))