web-dev-qa-db-ja.com

Playで現在のループのインデックスを取得しています! 2 Scalaテンプレート

劇中! 1、次のコードを使用して、ループ内で現在のインデックスを取得することができました。

_#{list items:myItems, as: 'item'}
    <li>Item ${item_index} is ${item}</li>
#{/list}
_

Play2には、そのようなことをするための同等のものはありますか?

_@for(item <- myItems) {
    <li>Item ??? is @item</li>
}
_

__isLast_と__isFirst_についても同じ質問です。

ps: この質問 は非常に似ていますが、解決策は、コードを変更して、itemのリストではなくTuple (item, index)を返すことを意味します。

22
Romain Linsolas

はい、zipWithIndex組み込み機能です。幸い、よりエレガントな使用方法があります。

@for((item, index) <- myItems.zipWithIndex) {
    <li>Item @index is @item</li>
}

インデックスは0ベースであるため、0ではなく1から開始する場合は、現在表示されているインデックスに1を追加するだけです。

<li>Item @{index+1} is @item</li>

PS:他の質問への回答-いいえ、暗黙のindexes_isFirst_isLastプロパティはありません。とにかく、単純なScalaリストのzip形式のインデックス(Int)とsizeIntも)の値に基づいて、ループ内の条件。

@for((item, index) <- myItems.zipWithIndex) {
    <div style="margin-bottom:20px;">
        Item @{index+1} is @item <br>
             @if(index == 0) { First element }
             @if(index == myItems.size-1) { Last element }
             @if(index % 2 == 0) { ODD } else { EVEN }
    </div>
}
55
biesior

リンクされた質問の答えは基本的にあなたがやりたいことです。 zipWithIndexはリスト(_Seq[T]_)をSeq[(T, Int)]に変換します。

_@list.zipWithIndex.foreach{case (item, index) =>
  <li>Item @index is @item</li>
}
_
8
Dan Simon