如何利用Seq.fill结合已有Seq[Int]生成Seq[Seq[Int]]?
解决Scala中用Seq.fill生成嵌套序列的问题
我明白你的需求啦——你想用已有的Seq[Int]实例,通过Seq.fill生成一个嵌套的序列结构,但因为fill的第二个参数要求是单个元素而非序列,所以直接传_random_values行不通。别担心,咱们用遍历的方式就能搞定!
核心思路
你需要遍历_random_values里的每一个整数,对每个整数单独调用Seq.fill,生成对应的子序列,最后把这些子序列收集起来,就能得到你想要的嵌套结构。
具体实现
场景1:生成Seq[Seq[Int]](每个源整数对应一个一维序列)
如果你的目标是把_random_values里的每个整数,都生成一个长度为width的一维序列,最终得到一个二维序列,代码可以这么写:
// 假设width是你定义的目标长度 val result: Seq[Seq[Int]] = _random_values.map(num => Seq.fill(width)(num))
或者用更易读的for推导式:
val result: Seq[Seq[Int]] = for { num <- _random_values } yield Seq.fill(width)(num)
场景2:生成Seq[Seq[Seq[Int]]](每个源整数对应一个二维序列)
如果你原本想的是每个整数生成一个width×width的二维序列(也就是三维结构),只需要调整fill的参数即可:
val result: Seq[Seq[Seq[Int]]] = _random_values.map(num => Seq.fill(width, width)(num))
为什么原来的代码不行?
Seq.fill(n1, n2)(elem)的elem参数要求是单个元素的生成逻辑(可以是一个固定值,也可以是返回单个元素的函数),而你直接传入_random_values(一个序列)不符合参数类型要求。通过map遍历每个元素,就能让每个整数都作为fill的元素参数,完美适配方法的要求。
内容的提问来源于stack exchange,提问作者JarsOfJam-Scheduler
相关产品推荐
相关产品推荐

