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

如何将整数Enum转字符串拼接后拆分出不超100字符且不切分数字的块

实现方案

Enum.chunk_while/4完全适用该需求,推荐不要先完成全量拼接再拆分,直接在字符串列表阶段按长度累积分块即可,既保证不会切分数字,内存效率也更高。

实现步骤如下:

  • 先把整数类型Enum统一转为字符串列表
  • 通过chunk_while累积当前块的元素和拼接后的总长度(总长度需算上元素之间的空格),长度即将超出限制时就切出当前块
  • 最后把每个分块的字符串列表用空格拼接即可

代码示例

def split_int_enum(int_enum, max_length \\ 100) do
  int_enum
  |> Enum.map(&to_string/1)
  |> Enum.chunk_while(
    # 初始累加器结构:{当前块的字符串列表, 当前块拼接后的总长度}
    {[], 0},
    fn str, {current_list, current_len} ->
      # 首个元素不需要加前置空格,后续元素需要加1个空格的长度
      add_space_len = if current_list == [], do: 0, else: 1
      new_total_len = current_len + add_space_len + String.length(str)

      if new_total_len <= max_length do
        # 长度未超出,继续累积元素
        {:cont, {[str | current_list], new_total_len}}
      else
        # 长度超出,输出当前块,当前元素作为新块的首个元素
        {:cont, Enum.reverse(current_list), {[str], String.length(str)}}
      end
    end,
    # 遍历结束后输出剩余的块
    fn {current_list, _len} ->
      {:cont, Enum.reverse(current_list), []}
    end
  )
  # 每个分块拼接为空格分隔的字符串
  |> Enum.map(&Enum.join(&1, " "))
end

注意事项

  • 如果存在单个整数转字符串后长度就超过100的情况,可以提前加判断逻辑,要么单独作为一个块,要么按业务要求抛出异常
  • 若一定要先完成全量拼接再拆分,也可以用正则~r/.{1,100}(?:\s|$)/匹配,但全量拼接超长列表时内存占用会远高于分块处理方案,不推荐使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:03