1

Webサイトを構築し(Web、Scala、Playframeworkは初めてですが、プログラミングの経験が豊富です)、ドメインモデルの一部を印刷しようとしています。カテゴリ->目標->タスクのドメインモデルがあります。タスクは目標について知っており、目標はカテゴリについて知っています。このように印刷したいのですが

Category1
    Goal1
        Activity1
    Goal2
        Activity2
        Activity3

私はScalaを使用しており、これを実行しました。

    @tasks.groupBy(_.goal).map { case (goal, tasks) =>
    <ul>
        <li>@goal.name</li>
        <ul>
            @tasks.map { task =>
                <li>@task.name</li>
            }
        </ul>
    </ul>
}

これで、次のように並べ替えられます。

Goal1
    Activity1
Goal2
    Activity2
    Activity3

ただし、最初に示した例のように、カテゴリ別に並べ替えたいと思います。Scalaでこれを行うための良い方法はありますか、それともドメインモデルを変更する必要がありますか?

よろしく、リナ

4

2 に答える 2

2

あなたは別のものを追加することによってこれを達成することができますgroupBy

tasks.groupBy(_.goal).groupBy { case (goal, _) => goal.category }

または、同等に:

tasks.groupBy(_.goal).groupBy(_._1.category)

これは、現在のアプローチから取得したマップを取得し、それを目標キーのカテゴリ別にグループ化して、次のMap[Category, Map[Goal, Seq[Task]]]ように使用できるようにします。

<ul>
  @tasks.groupBy(_.goal).groupBy(_._1.category).map { case (category, goals) =>
    <li>@category.name
      <ul>
        @goals.map { case (goal, tasks) =>
          <li>@goal.name
            <ul>
              @tasks.map { task => <li>@task.name</li> }
            </ul>
          </li>
        }
      </ul>
    </li>
  }
</ul>

ネストも少し調整したことに注意してください。

于 2012-09-02T11:31:04.297 に答える
1

それが最も簡単な方法かどうかはわかりませんが、次のようになります。

<ul>
    @defining(tasks.map(_.goal.category).distinct) {categories =>
        @categories.map{category =>
            <li>
                @category.name
            </li>
            <ul>
                @tasks.filter(_.goal.category == category).groupBy(_.goal).map{ case (goal, tasks) =>
                    <ul>
                        <li>@goal.name</li>
                        <ul>
                            @tasks.map {task =>
                                <li>@task.name</li>
                            }
                        </ul>
                    </ul>
                }
            </ul>
        }
    }
</ul>

@definingcategoriesメソッドのおかげで、一意のカテゴリのリストである値を定義できますdistinct

于 2012-09-02T11:30:22.037 に答える