迭代列表并处理Scala中未找到的项目

时间:2017-05-12 12:09:46

标签: 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

实际上我的列表有些复杂,但这个简单的例子很有用。

显然我在这里遗漏了一些东西,甚至可能以错误的方式攻击它。我希望有人能指出我正确的方向。谢谢。

3 个答案:

答案 0 :(得分:2)

也许制作成套装然后贴图。

val s = a.toSet
b.map{e => if (s.contains(e)) compute(e) else e}

答案 1 :(得分:1)

val r = b map (elem => if (a contains elem) elem else compute(elem))

答案 2 :(得分:0)

这个怎么样?

b.map(i => {
  val matches = a.filter(x => x == i)
  if (matches.nonEmpty) matches.head
  else compute(i)
})