freemarker list 去重循环
要在 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 是为了检查当前元素是否已经在之前的循环中出现过。如果元素没有出现过,就输出它
原文地址: https://www.cveoy.top/t/topic/eF4P 著作权归作者所有。请勿转载和采集!