2017-06-03 68 views
2

我試圖在Scala中配對兩個列表,其中不匹配的對應由默認值替換,這是迄今爲止我所擁有的,但是您的一切都以某種方式失敗。將不均勻長度的列表與缺省值匹配爲缺失值

如何創建列表((a,a),(b,空),(c,c))?

case class Test(id: Option[Int] = None) 
val empty = Test() 
val a = Test(Some(1)) 
val b = Test(Some(2)) 
val c = Test(Some(3)) 

val cache = List(a,b,c) 
val delta = List(a,c) 

//Trial 1 
val newCache1 = cache.zipAll(delta,empty,empty) 

//Tial 2 
val newCache2 = for { 
    c <- cache 
    d <- delta 
    if c.id == d.id 
} yield (c,d) 

//Tial 3 
val newCache3 = for { 
    c <- cache 
    d <- delta 
} yield if (c.id == d.id) (c,d) else (c,empty) 
+0

可以重複嗎?名單是否有序?你可以把三角洲放在地圖上,然後從中選出一對。 – Stephen

回答

1

把你的三角洲成圖,然後加入他們的行列了。

val deltaMap: Map[Int, Test] = 
    delta.flatMap(x => x.id.map(id => id -> x)).toMap 

    val newCache: Seq[(Test, Test)] = cache.map { c => 
    c -> c.id.flatMap(deltaMap.get).getOrElse(empty) 
    }