scala – 为什么headOption更快
发布时间:2020-12-16 09:54:30 所属栏目:安全 来源:网络整理
导读:我对一些代码进行了更改,速度提高了4.5倍.我想知道为什么.它本质上是: def doThing(queue: Queue[(String,String)]): Queue[(String,String)] = queue match { case Queue((thing,stuff),_*) = doThing(queue.tail) case _ = queue} 我把它改成了这个以获得
我对一些代码进行了更改,速度提高了4.5倍.我想知道为什么.它本质上是:
def doThing(queue: Queue[(String,String)]): Queue[(String,String)] = queue match { case Queue((thing,stuff),_*) => doThing(queue.tail) case _ => queue } 我把它改成了这个以获得巨大的速度提升: def doThing(queue: Queue[(String,String)] = queue.headOption match { case Some((thing,stuff)) => doThing(queue.tail) case _ => queue } _ *做什么以及为什么它与headOption相比如此昂贵? 解决方法
我在使用-Xprint运行scalac之后的猜测:所有是在队列匹配的patmat末尾{case Queue((thing,_ *)=> doThing(queue.tail)}示例我看到调用了以下方法(为简洁起见而编辑):
val o9 = scala.collection.immutable.Queue.unapplySeq[(String,String)](x1); if (o9.isEmpty.unary_!) if (o9.get.!=(null).&&(o9.get.lengthCompare(1).>=(0))) { val p2: (String,String) = o9.get.apply(0); val p3: Seq[(String,String)] = o9.get.drop(1); 所以 headOption示例更直接,它检查列表是否为空(两次比较),如果不是则返回Some(head),然后将_1和_2分配给thing和stuff.因此,没有创建迭代器,并且集合的长度没有线性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读