1
我一直在做一些稍微複雜的地圖工作,我需要解決的最後一個問題是取代Map()
,其關鍵是Option[Long]
,並用一個Option[User]
的關鍵替換它。Scala:用對象替換地圖中的鍵?
地圖上看起來像:
(Map[ Option[Long], List[Tuple3[Job,Option[Client],Option[Project]]] ]()
我有Option[User]
列表。我正在考慮一個foldleft可以做到這一點,但語法對於我的業餘愛好來說很棘手。我嘗試沒有成功如下:
theMap.foldLeft(users){
(u,j) =>
if(j._1!=None) {
Map(u, j._2)
} else {
Map(User.placeholder, j._2)
}
}.flatten
編譯如下錯誤提示,我可能不會得到在正確的地方的變量。
這怎麼能正確完成?
編輯:意識到我還需要匹配第一個Long
鍵到user.id
。如果我弄清楚它會更新它。
越來越近,只是切換到映射。但是這有點麻煩:
allJobs.map{
case ((i,l)) =>
val user = users.map{ user =>
if(user.map(_.id)==i) user
}
Tuple2(user.head, l)
}
這是乾淨的。我發現我的語法卡住了,我不知道那個漂亮的'toMap'。 「無」確實很重要,因爲我需要輸出沒有關聯用戶的作業。非常感謝你的幫助! – crockpotveggies 2012-07-20 18:26:49