如何在Scala中生成指定类型的可变单位矩阵(禁用zipWithIndex)
实现Scala可变单位矩阵(无zipWithIndex)
嘿,这事儿好办!我给你两种不用zipWithIndex的实现方式,都能生成你要的mutable.Seq[mutable.Seq[Double]]类型单位矩阵,完全避开你之前遇到的IndexedSeq问题。
方法一:基础循环实现
这种方式逻辑直白,一步步构建矩阵:
import scala.collection.mutable def createIdentityMatrix(size: Int): mutable.Seq[mutable.Seq[Double]] = { // 初始化空的可变矩阵 val matrix = mutable.ArrayBuffer.empty[mutable.Seq[Double]] // 遍历每一行索引 for (i <- 0 until size) { // 创建一行全0的可变序列 val row = mutable.ArrayBuffer.fill(size)(0.0) // 将当前行的对角位置设为1.0 row(i) = 1.0 // 把该行加入矩阵 matrix += row } matrix }
方法二:结合map的简洁实现
如果喜欢更函数式一点的写法,可以用map来生成每一行:
import scala.collection.mutable def createIdentityMatrix(size: Int): mutable.Seq[mutable.Seq[Double]] = { // 遍历行索引,生成每一行后转成可变矩阵 (0 until size).map { i => val row = mutable.ArrayBuffer.fill(size)(0.0) row(i) = 1.0 row }.to(mutable.ArrayBuffer) }
关键说明
- 这里用
ArrayBuffer是因为它是mutable.Seq的实现类,完全符合你要求的类型 - 两种方式都没有用到
zipWithIndex,彻底避开了你之前遇到的IndexedSeq相关问题 - 生成的矩阵和每一行都是可变的,你可以后续随时修改元素值
内容的提问来源于stack exchange,提问作者JarsOfJam-Scheduler
相关产品推荐
相关产品推荐

