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

如何在MiniZinc中以类似sum函数的方式拼接数组所有字符串?

在MiniZinc中实现字符串数组的拼接(类似sum的聚合方式)

嘿,这个问题问得很到位!确实,MiniZinc没有像sum那样直接内置的字符串拼接聚合函数,但咱们完全可以自己实现类似的效果,这里有两种实用的方法:

方法一:自定义递归拼接函数

你可以写一个递归函数来遍历数组,逐个拼接字符串元素。示例代码如下:

% 定义递归拼接函数:遍历数组,累积拼接结果
function string concat_array(array[int] of string arr, int idx, string acc) =
  if idx > upper_bound(arr) then acc
  else concat_array(arr, idx + 1, acc ++ arr[idx]);

% 你的示例字符串数组
array[0..10] of par string: symbols = array1d(0..10, ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]);

% 调用函数完成拼接
par string: concatenated_result = concat_array(symbols, lower_bound(symbols), "");

这个函数从数组的起始索引开始,把当前元素拼接到累加字符串acc中,直到遍历完所有元素,最后返回完整的拼接结果。

方法二:使用foldl折叠函数(MiniZinc 2.5+支持)

如果你用的是较新版本的MiniZinc(2.5及以上),可以直接用内置的foldl函数来实现这种聚合操作,它是一个通用的折叠工具,非常适合这类场景:

% 你的示例字符串数组
array[0..10] of par string: symbols = array1d(0..10, ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]);

% 用foldl执行拼接:初始值为空字符串,逐个拼接数组元素
par string: concatenated_result = foldl((s1, s2) -> s1 ++ s2, symbols, "");

foldl会把数组元素依次传入指定的二元操作(这里是字符串拼接运算符++),从初始的空字符串开始累积,最终得到整个数组的拼接结果。这种方式比递归更简洁,也更适合处理大数组(避免递归栈溢出的风险)。

小提示

确保你的MiniZinc版本支持字符串拼接运算符++——大部分现代版本都没问题,但如果是非常老的版本可能需要注意兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:45:43