Int 的 Scala 序列
Scala Sequence of Int
我有这样的东西:
case class FunctionsTest(lowerBound: Int = 1,
upperBound: Int = 1000,
factor: Int = 2) {
require(lowerBound < upperBound)
/**
* implement a sequence of ints, which start with lowerBound and end with
* upperbound.
*
* for all elements following should be true:
*
* xs(i) < xs(i+1)
* xs(i) + factor == xs(i + 1) (for i > 0 and i <= 1000)
*
*/
val xs: Seq[Int] = Seq.range(lowerBound,upperBound +1)
所以我需要这个 class 的序列,它构成了这些标准。我用
试过了
Seq.range()
但它为我创建了适合第一个标准的序列,但我不知道现在如何应用评论中提到的第二个标准?
您可以使用简单的 Range
创建它。
包括在内:(lowerBound to UpperBoud)
独家:(lowerBound until UpperBound)
如果你想要一个懒惰的评估者,有点像在 post 办公室等待的磁带计数器,你可以使用 scala Stream
。它们的内存效率非常高,因为它们只存储 Range 的头部,并且只在需要时懒惰地计算尾部。他们的 map, filter, reduce, ... 函数也是惰性的。
scala.collection.immutable.Stream.range(lowerBound, upperBound)
范围方法允许您设置步骤参数
Seq.range(lower, upper, factor)
Seq.range[T](start: T, end: T, step)
的 step
参数允许您按系数增加。
scala> Seq.range(1,10,2)
res0: Seq[Int] = List(1, 3, 5, 7, 9)
这两个条件都满足。
scala> res0.zip(res0.tail).forall(t => t._1 < t._2)
res4 Boolean = true
和
scala> res0(0) + 2 == res0(0 + 1)
res5: Boolean = true
更一般地说,您可以使用任意函数生成序列 iterate
:
Seq.iterate(1,1000)(_ + 2)
对于您的情况,任意函数等于 "a = a + 2",它被反复应用于起始值:1、1+2、(1+2)+2、...
我有这样的东西:
case class FunctionsTest(lowerBound: Int = 1,
upperBound: Int = 1000,
factor: Int = 2) {
require(lowerBound < upperBound)
/**
* implement a sequence of ints, which start with lowerBound and end with
* upperbound.
*
* for all elements following should be true:
*
* xs(i) < xs(i+1)
* xs(i) + factor == xs(i + 1) (for i > 0 and i <= 1000)
*
*/
val xs: Seq[Int] = Seq.range(lowerBound,upperBound +1)
所以我需要这个 class 的序列,它构成了这些标准。我用
试过了Seq.range()
但它为我创建了适合第一个标准的序列,但我不知道现在如何应用评论中提到的第二个标准?
您可以使用简单的 Range
创建它。
包括在内:(lowerBound to UpperBoud)
独家:(lowerBound until UpperBound)
如果你想要一个懒惰的评估者,有点像在 post 办公室等待的磁带计数器,你可以使用 scala Stream
。它们的内存效率非常高,因为它们只存储 Range 的头部,并且只在需要时懒惰地计算尾部。他们的 map, filter, reduce, ... 函数也是惰性的。
scala.collection.immutable.Stream.range(lowerBound, upperBound)
范围方法允许您设置步骤参数
Seq.range(lower, upper, factor)
Seq.range[T](start: T, end: T, step)
的 step
参数允许您按系数增加。
scala> Seq.range(1,10,2)
res0: Seq[Int] = List(1, 3, 5, 7, 9)
这两个条件都满足。
scala> res0.zip(res0.tail).forall(t => t._1 < t._2)
res4 Boolean = true
和
scala> res0(0) + 2 == res0(0 + 1)
res5: Boolean = true
更一般地说,您可以使用任意函数生成序列 iterate
:
Seq.iterate(1,1000)(_ + 2)
对于您的情况,任意函数等于 "a = a + 2",它被反复应用于起始值:1、1+2、(1+2)+2、...