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

Scala中如何优雅地将String数组按指定大小切分为多个子数组

数组按固定大小分组的实现方案

1. 标准库原生实现(最优雅,推荐首选)

Scala 集合的标准库已经内置了对应能力,直接调用grouped方法即可实现需求,代码量极低:

val arr1: Array[String] = Array("a", "b", "c", "d", "e", "f")
val blockSize = 2
// grouped返回迭代器,调用toArray转为目标类型
val res = arr1.grouped(blockSize).toArray

运行后res的结果就是Array(Array("a", "b"), Array("c", "d"), Array("e", "f")),完全匹配预期。哪怕你没有提前保证数组长度可被分组大小整除,该方法也会自动把剩余不足一个分组的元素放到最后一个子数组里,适配性很强。

2. 手动实现思路(自定义逻辑参考)

如果需要自己实现分组逻辑,可以参考索引映射的思路:

def groupBySize[T](originArr: Array[T], blockSize: Int): Array[Array[T]] = {
  // 先计算总分组数
  val groupCount = originArr.length / blockSize
  Array.tabulate(groupCount) { index =>
    // 按索引取对应区间的切片作为子数组
    originArr.slice(index * blockSize, (index + 1) * blockSize)
  }
}

// 调用示例
val res = groupBySize(arr1, 2)

核心逻辑说明:

  • 首先通过原数组长度除以分组大小,得到总共有多少个完整分组
  • 用tabulate方法生成分组数量长度的新数组,每个位置对应一个子分组
  • 用slice方法截取原数组对应区间的元素作为子分组内容,slice为左闭右开区间,刚好适配分组的起止索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:15:06