You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache FreeMarker 2.3.20中高效动态创建列表?

关于FreeMarker 2.3.20序列操作的性能与优化方案

一、多次序列拼接的性能影响范围

FreeMarker 2.3.20中,序列是不可变的,每次使用+拼接序列时,不会生成扁平化的新序列,而是创建嵌套的序列结构(比如seq1 + seq2会生成一个包含seq1和seq2作为子序列的父序列)。这种结构对两种操作都会产生性能影响:

  • 索引访问(如mylist[7]):需要逐层遍历嵌套的子序列,才能定位到目标元素,比扁平化序列的直接索引慢;
  • 迭代遍历(如<#list mylist as element>):同样需要递归遍历所有嵌套的子序列,逐个取出元素,遍历效率低于扁平化序列。

但你的列表最多仅25个元素,这种性能下降完全可以忽略,不会对实际生成XML的速度产生可感知的影响。

二、更优的序列构建方案

你当前使用字符串拼接再转序列的方法,存在两个明显问题:无法中途检查元素是否存在、若处理后的元素包含空格会被?word_list错误拆分。针对你的需求,推荐直接使用序列拼接结合seq_contains的方案:

<#-- 初始化空序列 -->
<#assign short_names = []>
<#list source_list as element>
  <#-- 生成短名称 -->
  <#assign short_name = element?substring(0,3)>
  <#-- 检查是否已存在,不存在则拼接 -->
  <#if !short_names?seq_contains(short_name)>
    <#assign short_names = short_names + [short_name]>
  </#if>
</#list>

方案优势:

  • 支持实时检查元素是否存在,可直接实现去重逻辑;
  • 避免了字符串转序列带来的格式风险(如空格拆分问题);
  • 虽然生成嵌套序列,但25个元素的规模下,性能完全够用。

内容的提问来源于stack exchange,提问作者PlasmaBinturong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 02:54:24