freemarker序列索引计算

freemarker sequence index calculation

过去一天左右我一直在思考这个问题,我不确定问题出在哪里。最好重新审视一下,让我知道我做错了什么。

我正在尝试循环遍历 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?number)+1]

如有任何帮助,我们将不胜感激

根据您收到的错误,当您到达最后一个项目的索引时,currIndex + 1 将指向最后一个项目之后,因此,该项目丢失了。无论如何,这是经过一些美化的固定版本。

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

但请注意,模板不是为处理此类问题而设计的。他们打算用真实语言显示已经 "calculated" 的数据。特别是,如果您有数百个重复项,请不要执行上述操作,因为生成的序列阅读起来会很慢(是的,阅读起来)。