我有一个具有以下数据结构的 Map(数据类型):
var timePassedCamerasetB = mutable.Map.empty[String, Time];
它包含一个字符串和一个“时间”对象。'Time' 对象由我自己的类组成。您可以在下面看到它的组成:
case class Time(daysSinceEpoch: Int, hours: Int, minutes: Int, seconds: Double)
我已将所有数据保存到这个“地图”变量中。但是有一个问题:我想根据多种因素对这个“Map”变量中的值进行排序,但是我找不到任何方法来使它工作。
例如。我在这张地图中存储了以下数据:
PP-33-XX -> Time(18492,3,7,0.0)
BA-12-PW -> Time(18492,9,0,40.0)
MM-11-OW -> Time(18492,3,7,16.0)
NX-66-PP -> Time(18492,3,6,30.0)
LA-53-NY -> Time(18492,9,0,56.0)
我想按顺序对值进行排序(最早到最晚时间)。这包括比较多个因素。首先比较每一天SinceEpoch,然后是小时、分钟和秒。
我想将地图转换为以下内容:
NX-66-PP -> Time(18492,3,6,30.0)
PP-33-XX -> Time(18492,3,7,0.0)
MM-11-OW -> Time(18492,3,7,16.0)
BA-12-PW -> Time(18492,9,0,40.0)
LA-53-NY -> Time(18492,9,0,56.0)
有谁知道一种有效的方法来做到这一点?可惜我不能..
听起来像是ListMap
你想要的。
来自ScalaDocs 页面:“条目以相反的插入顺序在内部存储,这意味着最新的键位于列表的头部。”
所以要从当前过渡Map
到 a ListMap
:
import scala.collection.immutable.ListMap
val newMap: ListMap[String,Time] =
oldMap.toList.sortBy{
case (_, Time(d,h,m,s)) => (d,h,m,s)
}.foldLeft(ListMap[String,Time]())(_+_)
测试:
newMap.head //res0: (NX-66-PP,Time(18492,3,6,30.0))
newMap.last //res1: (LA-53-NY,Time(18492,9,0,56.0))
newMap("MM-11-OW") //res2: Time(18492,3,7,16.0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句