如何根据多个因素对 Scala 中的“映射”值进行排序?

布赖恩

我有一个具有以下数据结构的 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)

有谁知道一种有效的方法来做到这一点?可惜我不能..

jwvh

听起来像是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据列的值对Laravel中的行进行排序?

如何根据python中的特定条件对值进行排序?

Scala根据另一个列表中的值对一个列表进行排序

如何映射仅从Scala的左值?

如何使用FlatMap java8根据键的数量对值进行哈希映射排序?

Scala中的多个选项值

如何根据元组列表中的值对元组进行排序

如何在Scala中的多个字段上使用混合的升序和降序对rdd进行排序

如何根据R中的多个因素对数据点进行分类

如何根据Scala中的对象字段对列表对象进行排序?

如何通过值对对象进行排序,但仍然可以在映射函数中访问该对象的键?

在Scala中按值对现有地图进行排序

如何根据Altair图表中的选择对值进行排序?

如何在scala中对相似的列值进行分组?

如何先按值对映射条目进行排序,然后按键排序,然后将排序后的键放入列表中?

在scala中映射多个数组

如何在lua中根据多个值对表进行排序?

根据条件对哈希映射值进行排序

如何按值对 C++ 中的映射进行排序,但如果值按键相等?

如何在 Scala 中按值对 RDD 数据(键、值)进行排序?

如何根据Jquery中的td值对tr进行排序

以“Scala方式”根据另一个集合对值集合进行排序

如何根据值在javascript中对Hashmap进行排序

如何在 JavaScript 中按值(例如来自 Firestore)对多数组/嵌套映射进行排序

如何根据其子项中包含的值对 div 进行排序?

根据保留 javascript 中其余项目的实际顺序的特定值对数组映射项目进行排序/排序

如何在spark Scala中按值排序

在 Scala 中对 ZonedDateTime 进行排序

根据列表中的值对字典进行排序