Scala排序选项
发布时间:2020-12-16 09:53:31 所属栏目:安全 来源:网络整理
导读:如果我有这样的案例类 case class Foo(bar: Option[String]) 为什么这样做 scala val l = List(Foo(Some("b")),Foo(Some("a")),Foo(Some("c")))l: List[Foo] = List(Foo(Some(b)),Foo(Some(a)),Foo(Some(c)))scala l.sortBy(_.bar)res1: List[Foo] = List(Fo
如果我有这样的案例类
case class Foo(bar: Option[String]) 为什么这样做 scala> val l = List(Foo(Some("b")),Foo(Some("a")),Foo(Some("c"))) l: List[Foo] = List(Foo(Some(b)),Foo(Some(a)),Foo(Some(c))) scala> l.sortBy(_.bar) res1: List[Foo] = List(Foo(Some(a)),Foo(Some(b)),Foo(Some(c))) 但不是这个 scala> l.sortWith((x,y) => x.bar > y.bar) <console>:11: error: value > is not a member of Option[String] l.sortWith((x,y) => x.bar > y.bar) 如果我想按降序对Option [String]列表进行排序,那么使用sortBy然后反转列表会更简单吗? 解决方法
这是因为排序但不是sortWith采用Ordering类型的隐式参数,Ordering知道选项.使用sortWith,您可以自己动手.并且<你也是自己的. 您可以以笨重的方式访问相同的机器:
l.sortWith((a,b) => Ordering[Option[String]].gt(a.bar,b.bar)) 或者通过导入获得更好的版本(但现在您可以根据其内容比较选项;希望这就是您想要的): import scala.math.Ordered._ l.sortWith((a,b) => a.bar > b.bar) 第一个是如此满口,除非你真的按性能,否则更容易只是.sorted.reverse ..(如果你真的要求性能,你可能会更好地手动处理选项逻辑,ega bar.isEmpty ||!b.bar.isEmpty || a.bar.get< b.bar.get.) 如果你要进行多种选择,那么为了清晰起见,很难击败第二种.对于一次测试,我仍然可能偏爱.sorted.reverse. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- bootstrap, boosting, bagging 几种方法的联系
- 同时在一个WebService服务中发布多个普通Java类
- ng-content 中隐藏的内容
- 基于JAX-WS用wsdl生成webservice服务端代码
- angularjs – Angular .controller()在.run()之前
- Twitter Bootstrap和jQuery UI?
- Angular2、AngularJS、React、vue.js过去一年的G
- angularjs – 如何在不使用require.js的情况下启
- NAF框架终于有了一个好的开端。
- scala – 是否有任何用于为Play 2.x生成API文档的
热点阅读