0

List[(A,B,C)]htmlレポートを作成するには、をマップする必要があります。具体的には、

List[(Schedule,GameResult,Team)]

スケジュールにはgameDateプロパティが含まれており、これをグループ化して取得する必要があります。

Map[JodaTime, List(Schedule,GameResult,Team)]

これは、gameDateテーブルの行ヘッダーを表示するために使用します。簡単:

val data = repo.games.findAllByDate(fooDate).groupBy(_._1.gameDate)

ここで(私にとって)注意が必要なのは、ゲーム結果をペアとしてマッピングできるようにするために、グループ化をさらに洗練する方法です。明確にするために、各GameResultは、チームのゲームの「バージョン」(スコア、場所など)で構成され、対戦相手のチームと共通のスケジュールgameIDを共有します。

基本的に、ゲーム結果の結果を次のように1行に表示する必要があります。

3 London Dragons vs. Paris Frogs 2

gameDateでグループ化すると、次のようなことができます。

data.map{case(date,games) =>
  // game date row headers
  <tr><td>{date.toString("MMMM dd, yyyy")}</td></tr>

  // print out game result data rows
  games.map{case(schedule,result, team)=>
    ...
    // BUT (result,team) slice is ungrouped, need grouped by Schedule gameID
  }
}

既存のアプリケーション(PHP)の古いバージョンでは、

for($x = 0; $x < $this->gameCnt; $x = $x + 2) {...}

しかし、come-back-later-wtf-is-that-inducingではなく、変数名を参照したいと思います。

games._._2(rowCnt).total games._._3(rowCnt).name games._._1(rowCnt).location games._._2(rowCnt+1).total games._._3(rowCnt+1).name

多分zipまたはdoubleupfor(t1 <-data; t2 <-data)yield(?)または他の何かが完全にトリックを行います。とにかく、簡潔な解決策がありますが、今は私に来ていません...

4

2 に答える 2

1

RégisJean-Gillesからの魂をOK:

val data = repo.games.findAllByDate(fooDate).groupBy(_._1.gameDate).mapValues(_.groupBy(_._1.gameID))

あなたはそれが正しくなかったと言いました、多分あなたはそれを正しい方法で使用しなかったのですか?結果のすべてのリストは、同じGameIdを持つゲームのペアです。あなたはそのようなhtmlをpruduceすることができます:

data.map{case(date,games) =>
  // game date row headers
  <tr><td>{date.toString("MMMM dd, yyyy")}</td></tr>

  // print out game result data rows
  games.map{case (gameId, List((schedule, result, team), (schedule, result, team))) =>
    ...
  }
}

また、gameIdは必要ないため、ペアになっているゲームだけを返すことができます。

val data = repo.games.findAllByDate(fooDate).groupBy(_._1.gameDate).mapValues(_.groupBy(_._1.gameID).values)

結果のヒントは次のとおりです。

Map[JodaTime, Iterable[List[(Schedule,GameResult,Team)]]]

すべてのリストは、同じGameIdを持つ2つのゲームのペアです。

于 2012-10-19T17:26:04.477 に答える
1

たぶん私はあなたの要件を誤解していますが、あなたが必要とするのは追加のgroupByだけであるように私には思えます:

repo.games.findAllByDate(fooDate).groupBy(_._1.gameDate).mapValues(_.groupBy(_._1.gameID))

結果は次のようになります。

Map[JodaTime, Map[GameId, List[(Schedule,GameResult,Team)]]]

(ここGameIdで、のリターンタイプのタイプはSchedule.gameId

更新:結果をペアで表示したい場合は、Arjanが示すように、パターンマッチングが最適です。これは私たちに与えるでしょう:

val byDate = repo.games.findAllByDate(fooDate).groupBy(_._1.gameDate)
val data = byDate.mapValues(_.groupBy(_._1.gameID).mapValues{ case List((sa, ra, ta), (sb, rb, tb)) => (sa, (ta, ra), (tb, rb)))

今回の結果は次のタイプです。

Map[JodaTime, Iterable[ (Schedule,(Team,GameResult),(Team,GameResult))]]

MatchError同じgameIdを持つエントリが正確に2つない場合、これはをスローすることに注意してください。実際のコードでは、このケースを確実にチェックする必要があります。

于 2012-10-19T12:49:24.017 に答える