You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何按多维度条件对Map存储的自定义Time对象值排序

Scala 可变Map按自定义Time值排序实现方案

因为你定义的Time是样例类,Scala样例类默认会按构造参数从左到右的顺序生成Ordering排序规则,刚好和你要求的daysSinceEpoch > hours > minutes > seconds优先级完全匹配,所以可以用非常简洁的方式实现排序,时间复杂度为标准的O(n log n),是通用排序场景下的最优效率。

具体实现代码

1. 排序得到有序序列(最常用)

如果只需要排序后的遍历结果,直接转成Seq后排序即可:

// 写法1:利用样例类默认排序规则,最简洁
val sortedResult = timePassedCamerasetB.toSeq.sortBy(_._2)

// 写法2:显式指定排序字段,兼容性更强,后续Time类参数顺序调整也不会影响排序逻辑
val sortedResult = timePassedCamerasetB.toSeq.sortBy { case (_, time) =>
  (time.daysSinceEpoch, time.hours, time.minutes, time.seconds)
}

直接遍历sortedResult就能得到你要求的从早到晚的排序结果。

2. 得到保持排序顺序的Map

如果需要保留Map的结构同时维持排序顺序,可以转成不可变的ListMap(按插入顺序保存):

import scala.collection.immutable.ListMap

val sortedMap = ListMap.from(sortedResult)

测试验证

用你提供的测试数据运行上述代码,输出结果和你预期的完全一致:

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)

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:09:02