【发布时间】:2016-11-16 17:11:28
【问题描述】:
这个问题可能是重复的,但是,我没有遇到任何可以回答我的问题的问题。
所以我有一个List[ List[ Option[ Double ] ] ]
有以下数据:
var tests = List(
List(Some(313.062468), Some(27.847252)),
List(Some(301.873641), Some(42.884065)),
List(Some(332.373186), Some(53.509768))
)
我想计算这个等式:
def findDifference(oldPrice: Option[Double], newPrice: Option[Double]): Option[Double] = {
return Some(( newPrice.get - oldPrice.get ) / oldPrice.get)
}
关于以下内容:
它对两个列表的元素进行计算:
(Some(301.062468) - Some(313.062468)) / Some(313.062468)
(Some(332.373186) - Some(301.873641)) / Some(301.873641)
(Some(42.884065) - Some(27.847252)) / Some(27.847252)
(Some(53.509768) - Some(42.884065)) / Some(42.884065)
结果应该返回: #
List(
List(Some(-0.03573991820699504), Some(0.5399747522663995))
List(Some(0.10103414428290529), Some(0.24777742035415723))
)
到目前为止我的代码
def findDifference(oldPrice: Option[Double], newPrice: Option[Double]): Option[Double] = {
return Some(( newPrice.get - oldPrice.get ) / oldPrice.get)
}
def get_deltas(data: List[List[Option[Double]]]): List[List[Option[Double]]] = {
for {
i <- data
// So this is where I am stuck. I have the current element i, but I need the same index element in the next list
} ( findDifference(i,?) }
我的输出如果我在 For-comprehension 中打印我的 I
List(Some(313.062468), Some(27.847252))
List(Some(301.873641), Some(42.884065))
List(Some(332.373186), Some(53.509768))
我卡在哪里了?
我不知道如何从列表 2 和列表 3 中获取列表 1 中相同索引的元素并进行必要的计算?
请帮我实现我的结果输出
【问题讨论】:
-
当您在
findDifference方法中使用.get解开每个可能的值时,用Some包装您的值有什么意义? -
1 - 如果元素的索引很重要,则不能以这种方式使用
for理解。 2 - 如果这些选项中的任何一个是None,您的代码将引发运行时异常。 (这就是 Options 的用途。) 3 - 我认为您的数据表示太复杂了。 -
我添加了一些来解释我的问题。它不需要在里面。我只是不知道如何进行计算。有没有办法做到这一点? @jwvh
-
@PawełJurczenko 没有意义。我只是添加它来解释我的问题。
-
你离得很近。查看您拥有
( findDifference(i,?) }的位置,它应该是( findDifference(i(0),i(1)) }。我在下面的回答几乎说了同样的话
标签: scala list nested-lists for-comprehension scala-option