我有每天的营业时间列表,类型为
Map[String, List[(String, String)]]
Key 是星期几,列表元素包含 Open_from 和 open_to。以下是示例
Map(MONDAY -> List( (08:00:00, 12:00:00), (13:00:00, 16:00:00)),
TUESDAY -> List( (09:00:00, 12:00:00), (13:00:00, 16:00:00)),
...
...
)
我必须检查以下条件以检查是否有重叠的时间
如果该地图中有任何重叠的时间,则必须返回 true 或 false。我尝试使用 FoldLeft 进行操作并与列表中的下一个元素进行比较。但不知道如何返回布尔值。
您能告诉我如何做到这一点吗?谢谢
谢谢
我认为你的左折叠走在正确的道路上。我在实现中使用了 Int 而不是时间。在可读性方面还有很大的改进空间:
val openingTimes = Map(
"MONDAY" -> List( (1, 2), (3, 4)),
"TUESDAY" -> List( (1, 3), (2, 4))
)
openingTimes.forall { case (_, timeRanges) =>
timeRanges.forall { case (from, to) => from < to } &&
timeRanges.foldLeft(true -> Int.MinValue) { case ((nonOverlapping, prevTime), (time)) =>
(nonOverlapping && prevTime < time._1) -> time._2
}._1
}