2017-01-14 1 views
0

私はこの1日ほど前に頭を叩いていましたが、何が問題なのかわかりません。私が間違っていることを私に教えてもらうために、新鮮な目をするのは良いことでしょう。freemarkerのシーケンスインデックスの計算

私はfreemarkerで文字列のソートされたシーケンスをループしようとし、新しいシーケンスに格納するために複製を引き出します。重複はユニークではなく、私が望むものです。現在のインデックス付きのアイテムがそれに次のシーケンス内の項目と等しい場合

arrMsdIds[currIndex+1]==itemId 

だから、イムチェック:

<#assign dupMessageids = [] /> 
<#list arrMsdIds as itemId> 
     <#assign currIndex = itemId?index /> 
     <#if arrMsdIds[(currIndex?number)+1]==itemId> 
      <#assign dupMessageids = dupMessageids + [itemId] /> 
     </#if> 
</#list> 

もこの成功せずに表現してみました。しかし、このエラーを取得しています:

次はnullに評価さまたは欠落しています ==> arrMsdIds [(?currIndex数)+1]

は、すべてのヘルプは大のとおり

答えて

2

をいただければ幸いですあなたが得る最後のアイテムのインデックスに達すると、currIndex + 1は最後のアイテムの後を指しますので、そのアイテムはありません。とにかく、ここにいくつかのprettifyingと固定バージョンです。

<#assign dupMessageIds = []> 
<#list arrMsdIds as itemId> 
    <#if itemId?has_next && arrMsdIds[itemId?index + 1] == itemId> 
    <#assign dupMessageIds += [itemId] /> 
    </#if> 
</#list> 

しかし、テンプレートはこのようなものに対処するように設計されていないことに注意してください。彼らは、すでに実際の言語で「計算された」データを表示することを意味していました。特に、何百もの重複がある場合は、結果シーケンスの読み込みが非常に遅くなります(はい、読み込むことになります)。

+0

ありがとうございます。 ?has_nextチェックは確かに問題の解決策でした。 –