繁体   English   中英

遍历列表并处理Scala中未找到的项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM