加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中使用Streams进行排序

发布时间:2020-12-16 18:42:26 所属栏目:安全 来源:网络整理
导读:假设存在序列a [i] = f(a [i-1],a [i-2],… a [i-k]).你会如何使用 Scala中的流编码? 解决方法 可以将它推广到任何k,使用数组用于a和另一个k参数,并且具有f.i.,该函数具有rest …参数. def next(a1:Any,...,ak:Any,f: (Any,Any) = Any):Stream[Any] { val n
假设存在序列a [i] = f(a [i-1],a [i-2],… a [i-k]).你会如何使用 Scala中的流编码?

解决方法

可以将它推广到任何k,使用数组用于a和另一个k参数,并且具有f.i.,该函数具有rest …参数.

def next(a1:Any,...,ak:Any,f: (Any,Any) => Any):Stream[Any] {
  val n = f(a1,ak)
  Stream.cons(n,next(a2,n,f))
}

val myStream = next(init1,initk)

为了让第1000个做下一个.drop(1000)

更新以显示如何使用varargs完成此操作.请注意,传递的函数没有arity检查:

object Test extends App {

def next(a:Seq[Long],f: (Long*) => Long): Stream[Long] = {
  val v = f(a: _*)
  Stream.cons(v,next(a.tail ++ Array(v),f))
}

def init(firsts:Seq[Long],rest:Seq[Long],f: (Long*) => Long):Stream[Long] = {
  rest match {
    case Nil => next(firsts,f)
    case x :: xs => Stream.cons(x,init(firsts,xs,f))
  }
}

def sum(a:Long*):Long = {
  a.sum
}

val myStream = init(Seq[Long](1,1,1),Seq[Long](1,sum)


myStream.take(12).foreach(println)

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读