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

Scala中如何将IndexedSeq[Array[Int]]转为Array[Array[Int]]?

解决Scala二维数组元素乘值后保持原类型的问题

你遇到的问题核心在于遍历对象的类型:当你遍历m.indices(这是一个Range,属于IndexedSeq)时,yield返回的结果会是IndexedSeq类型;而直接遍历数组m本身,yield会返回和原数组同类型的结果。

下面提供两种可行的解决方案:

方案1:直接遍历数组行(推荐)

不需要通过索引访问,直接遍历二维数组的每一行,这样yield会直接返回Array[Array[Int]]:

val m = Array(
  Array(1,2,3),
  Array(4,5,6),
  Array(7,8,9)
)

val value = 3

val result = for (row <- m) yield row.map(_ * value)
// 结果类型:Array[Array[Int]] = Array(Array(3, 6, 9), Array(12, 15, 18), Array(21, 24, 27))

原理:Scala的for推导式会根据遍历的集合类型返回对应类型的结果,遍历Array时,输出自然也是Array。

方案2:基于索引遍历后转换类型

如果一定要通过索引操作,只需将整个yield的结果调用.toArray,把外层的IndexedSeq转为Array即可:

val result = (for (i <- m.indices) yield m(i).map(x => x * value)).toArray
// 结果类型:Array[Array[Int]] = Array(Array(3, 6, 9), Array(12, 15, 18), Array(21, 24, 27))

注意:这里需要把整个for表达式用括号包裹,再调用.toArray——如果只是给map的结果加.toArray,不会改变外层集合的类型,这也是你之前尝试直接追加无效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:15:43