要在 FreeMarker 中循环一个去重后的列表,可以使用 ?sort_by?seq_contains 内建函数。

首先,使用 ?sort_by 函数对列表进行排序。然后,使用 ?seq_contains 函数来检查一个元素是否已经在前面的循环中出现过。如果元素没有出现过,就可以在循环中使用它。

下面是一个示例代码:

<#assign myList = ["apple", "orange", "banana", "apple", "grape", "orange"]>

<#list myList?sort_by(x => x) as item>
  <#if loop.first || item != myList[loop.index - 1] || myList[0..loop.index - 1]?seq_contains(item) == false>
    ${item}
  </#if>
</#list>

这个代码会输出去重后的列表:

apple
banana
grape
orange

在循环中,loop.index 表示当前元素在列表中的索引。loop.first 表示当前元素是否是列表的第一个元素。myList[0..loop.index - 1] 表示当前元素之前的子列表。

if 语句中,第一个条件 loop.first 是为了输出第一个元素。第二个条件 item != myList[loop.index - 1] 是为了排除重复元素。第三个条件 myList[0..loop.index - 1]?seq_contains(item) == false 是为了检查当前元素是否已经在之前的循环中出现过。如果元素没有出现过,就输出它

freemarker list 去重循环

原文地址: https://www.cveoy.top/t/topic/eF4P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录