2017-01-14 3 views
0

Я бил головой об этом в течение последнего дня или около того, и я не уверен, в чем проблема. Было бы неплохо получить свежие глаза, чтобы сообщить мне, что я делаю неправильно.расчет индекса последовательности freemarker

Im пытается перебрать отсортированную последовательность строк в freemarker и вытащить дубликаты для сохранения в новой последовательности. Дубликаты - это то, что я хочу, а не уникальные.

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

также попытался это выражение без успеха:

arrMsdIds[currIndex+1]==itemId 

Так им проверки, если текущий индексированный элемент равен пункта рядом с ним в последовательности. Но я получаю эту ошибку:

Следующая оценивала обнулить или отсутствует: ==> arrMsdIds [(? CurrIndex число) +1]

Любая помощь будет принята с благодарностью

ответ

2

Как из ошибка, которую вы получите, когда вы достигнете индекса последнего элемента, currIndex + 1 будет указывать после последнего элемента, следовательно, этот элемент отсутствует. Во всяком случае, это фиксированная версия с некоторыми преувеличениями.

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

Но обратите внимание, что шаблоны не предназначены для работы с такими вещами. Они хотели показать данные, которые уже были «рассчитаны» на реальном языке. В частности, не делайте этого, если у вас есть сотни дубликатов, так как результирующая последовательность будет очень медленной для чтения (да, для чтения).

+0

Благодарим вас за это. Проверка has_next действительно была решением проблемы. –

Смежные вопросы