如何创建给定类型的列表列表,其大小可能会因输入而异?

我需要创建一个返回List [List [Option [Double [Double]]]]的函数,其中该函数采用股市交易代码的List [String],并且该函数必须查看几年的范围,因此例如Range [2000,2019,1]。

该函数将调用另一个函数:

def price(symbol: String,year: Int) : Option[Double] = ... 

这将返回Option [Double] Some(double)或None。因此,假设我要创建的函数采用List(“ GOOG”,“ AAPL”)和Range [2010,2013,1],结果应类似于:

List(List(Option for Google 2010,Option for Apple 2010),List(Option for Google 2011,Option for Apple 2011),List(Option for Google 2012,Option for Apple 2012)).  

我不允许在代码中使用'var',只能使用'val',这当然意味着一旦声明就不能进行修改。

所以我要问的是当我不知道List [String]或Range中有多少个值时,如何创建此List [List [Option [Double]]]。我假设不可能在for循环中将其点起来,并且必须全部在列表声明期间发生。

到目前为止,我唯一能想到的就是按照以下方式做点事情:

val returnList : List[List[Option[Double]]] = List(x => rangeIn.foreach(List(y => symbolsIn.foreach(price(y,x)))))
ergasfgsafg 回答:如何创建给定类型的列表列表,其大小可能会因输入而异?

您可以使用map代替返回类型为foreach的{​​{1}}。

例如:

Unit

Scala demo

,

@ the-fourth-bird的答案是解决之道。

但是您询问在for循环中是否可能。在Scala中,您很少看到传统的for循环,并且通常使用for-compression。看起来不像其他答案那么好,但是有可能。

除了一些包装外,它几乎可以使用几乎相同的代码。

val prices = (for {
    s <- List(symbols)
    r <- range
} yield s.flatMap(price(_,r)))
本文链接:https://www.f2er.com/3129537.html

大家都在问