[英]Iterate through list and handle not found items in Scala
我有两个列表A和B。我想遍历列表B并从A中查找匹配项。对于每个不匹配项,我想调用另一个函数来计算新值。
我尝试了不同的方法来获得想要的结果:
val a = List(1,2,3)
val b = List(1,2,4,5)
def compute(i:Int):Int = -1*i
// What I want: val r = List(1,2,-4,-5)
val r1 = b.foreach(bb => a.find(aa => aa==bb).getOrElse(compute(bb)))
val r2 = for {
bb <- b
r <- a.find(_ == bb).getOrElse(compute(bb))
} yield r
实际上,我的列表比较复杂,但是这个简单的示例有效。
显然我在这里丢失了一些东西,甚至可能以错误的方式对其进行了攻击。 我希望有人能指出我正确的方向。 谢谢。
也许要先设定一个然后再映射。
val s = a.toSet
b.map{e => if (s.contains(e)) compute(e) else e}
val r = b map (elem => if (a contains elem) elem else compute(elem))
这个怎么样?
b.map(i => {
val matches = a.filter(x => x == i)
if (matches.nonEmpty) matches.head
else compute(i)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.