gpt4 book ai didi

scala - 创建一个生成长度为 N 的整数有序列表的 Scala 函数

转载 作者:行者123 更新时间:2023-12-04 23:00:44 26 4
gpt4 key购买 nike

假设我有一个简单的函数,它为 <1000 且 x <= y 的两个正整数 (x,y) 的所有列表构建一个迭代器

def twoIntsIterator(): Iterator[List[Int]] = {
for {
x <- Iterator.range(1, 1000)
y <- Iterator.range(x, 1000)
} yield List(x, y)
}

你将如何实现一个函数 intsListIterator(n: Int, limit: Int)将列表创建概括为可变长度列表?对于 n=2 和 limit=1000,这样的函数将产生与上述函数相同的输出。如果使用 n=3 和 limit=4 调用,它将返回一个迭代器,产生以下结果:
List(1,1,1)
List(1,1,2)
List(1,1,3)
List(1,2,2)
List(1,2,3)
List(1,3,3)
List(2,2,2)
List(2,2,3)
List(2,3,3)
List(3,3,3)

注意:我使用了迭代器,但它们可能是 View ,重点是变量列表长度

最佳答案

这是我的解决方案:

scala> def gen(n: Int, limit: Int): Iterator[List[Int]] = n match {
| case 0 => Iterator(Nil)
| case _ => for(t <- 1 to limit iterator;s <- gen(n-1, t)) yield s:+t
| }

编辑
以下方法生成所有 List s 大小 n其元素满足 start <= x < end , 你可以定义 intsListIterator经过
def intsListIterator(n: Int, limit: Int) = gen(n, 1, limit)

scala> def gen(n: Int, start: Int, end: Int): Iterator[List[Int]] = n match {
| case 0 => Iterator(Nil)
| case _ => for(i <- Iterator.range(start, end);s <- gen(n-1,i,end)) yield i::s
| }
gen: (n: Int, start: Int, end: Int)Iterator[List[Int]]

scala> gen(3, 1, 4) foreach println
List(1, 1, 1)
List(1, 1, 2)
List(1, 1, 3)
List(1, 2, 2)
List(1, 2, 3)
List(1, 3, 3)
List(2, 2, 2)
List(2, 2, 3)
List(2, 3, 3)
List(3, 3, 3)

scala> gen(7, -3, 4) take 10 foreach println
List(-3, -3, -3, -3, -3, -3, -3)
List(-3, -3, -3, -3, -3, -3, -2)
List(-3, -3, -3, -3, -3, -3, -1)
List(-3, -3, -3, -3, -3, -3, 0)
List(-3, -3, -3, -3, -3, -3, 1)
List(-3, -3, -3, -3, -3, -3, 2)
List(-3, -3, -3, -3, -3, -3, 3)
List(-3, -3, -3, -3, -3, -2, -2)
List(-3, -3, -3, -3, -3, -2, -1)
List(-3, -3, -3, -3, -3, -2, 0)

关于scala - 创建一个生成长度为 N 的整数有序列表的 Scala 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com