scala – 如何将Map [A??,B]转换为按字符串排序的键值字符串?
假设我有一张地图:
val m = Map("foo" -> 10,"bar" -> 5) 我想将其转换为以下格式的字符串(键和值用“:”分隔,不同的元素用“,”分隔): "bar:5,foo:10" 请注意,现在订购了密钥. 如何编写函数来执行此转换?我试过了 def f[A,B](m: Map[A,B]): String = { m.toList.sortBy(_._1).map { x => x._1 + ":" + x._2 }.mkString(",") } 但这不起作用,因为不知何故,我需要指定A是可订购的.我不知道该怎么做 – 我尝试在我的函数中添加一个隐式的Orderer参数,但它没有用. 解决方法
使用Ordering类型类:
def f[A: Ordering,") } 这会使用隐式Ordering参数向f添加另一个参数列表.方法签名实际上是在场景后面翻译的: def f[A,B])(implicit evidence: Ordering[A]): String 然后,sortBy选取证据参数并用于比较元素. 编辑: 请注意,您不能以与订购相同的方式使用Ordered. Ordered trait旨在与将要排序的对象类型(如Java中)混合在一起.换句话说,A必须扩展Ordered [A]然后你会把它写成A< ;:Ordered [A]. 但是,使用Ordered的这种继承方法不如使用Ordering的类型类方法强大,因为它不太灵活.如果其他人定义了A并且没有决定使它扩展Ordered [A],那么你将无法将它与sortBy一起使用(至少在没有创建包装类的情况下).另一方面,您始终可以在范围内声明新的隐式排序[A],而无需更改A继承的内容,并以您喜欢的任何方式实现此排序.这允许您在A的实现者忘记这样做时定义A类对象的排序方式,并在需要非默认排序时重新定义它们的排序方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Scala测试中模拟Dispatch http客户端?
- xfire开发webservice
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:自适应
- vim – 是否可以在运算符挂起的映射中确定运动是线性,块状还
- bootstrap学习23---进度条
- Angular 2试图在服务中实现Observable
- PolymerDart自定义元素,具有与Angular.dart模型的双向绑定
- angularjs – 在angularstrap datepicker中显示/隐藏的手动
- Vim关闭时出现错误消息
- AngularJS 2 – 使用哪种语言? (Typescript,Javascript,Da