检查列表中是否有重叠的时间

问题描述 投票:0回答:1

我有每天的营业时间列表,类型为

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)),
  ...
  ...
)

我必须检查以下条件以检查是否有重叠的时间

  1. Open_to 应大于 Open_from
  2. 如果一天列表中有超过 1 个元素(如上例所示),则第一个元素的 open_to 应小于下一个元素的 open_from。

如果该地图中有任何重叠的时间,则必须返回 true 或 false。我尝试使用 FoldLeft 进行操作并与列表中的下一个元素进行比较。但不知道如何返回布尔值。

您能告诉我如何做到这一点吗?谢谢

谢谢

scala generics implicit
1个回答
0
投票

我认为你的左折叠走在正确的道路上。我在实现中使用了 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
}
© www.soinside.com 2019 - 2024. All rights reserved.