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