创建一个scala函数,生成长度为N的整数的有序列表
发布时间:2020-12-16 09:53:57 所属栏目:安全 来源:网络整理
导读:假设我有一个简单的函数,它构建了两个正整数(x,y)的所有列表的迭代器,这些正整数是 1000并且x = y def twoIntsIterator(): Iterator[List[Int]] = { for { x - Iterator.range(1,1000) y - Iterator.range(x,1000) } yield List(x,y)} 你将如何实现一个函数i
假设我有一个简单的函数,它构建了两个正整数(x,y)的所有列表的迭代器,这些正整数是< 1000并且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,2) List(1,3) List(1,2,3,3) List(2,2) List(2,3) List(3,3) N.B.:我使用了迭代器,但它们可能是视图,重点是变量列表长度 解决方法
只需使用递归:
def produce(n: Int,limit: Int,k: Int = 1): Iterator[List[Int]] = { Iterator.range(k,limit) flatMap { case x if n > 1 => produce(n - 1,limit,x).map(x :: _) case x => Iterator(List(x)) } } 或者为了理解: def produce(n: Int,k: Int = 1): Iterator[List[Int]] = for { x <- k to limit - 1 iterator; y <- if (n > 1) produce(n - 1,x) else Iterator(Nil) } yield x :: y (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |