1

少し複雑なマップでいくつかの作業を行ってきましたが、解決する必要がある最後の問題はMap()、キーが である a を であるキーOption[Long]に置き換えることOption[User]です。

マップは次のようになります。

(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

以下のコンパイラ エラーは、おそらく適切な場所に変数を取得していないことを示しています。

type mismatch; found : List[Option[models.User]] required: (?, ?)

どうすればこれを適切に達成できますか?

編集:最初のLongキーをuser.id. 分かり次第更新していきます。

近づいてマッピングに切り替えるだけです。しかし、これは少し面倒です:

allJobs.map{
     case ((i,l)) =>
       val user = users.map{ user =>
         if(user.map(_.id)==i) user
       }
       Tuple2(user.head, l)
   }
4

1 に答える 1

3

私があなたを正しく理解していれば、これでうまくいくはずです。

val userMap = users map {u => (u, theMap(u map {_.id})} toMap

Optionキーは 1 つしか存在できないため、ここでのキーの有用性はわかりませんNoneが、そのキーを説明する必要があり、usersリストにない可能性がある場合は、個別に追加できます。

val newMap = if(theMap contains None) userMap + (User.placeholder, theMap(None)) 
             else userMap
于 2012-07-20T18:14:31.223 に答える