【问题标题】:Scala: sort comparing with adjacent elements [closed]Scala:与相邻元素进行比较排序[关闭]
【发布时间】:2017-11-19 13:26:35
【问题描述】:

假设我有以下 Scala 类:

Human(id: String, task: Task)

Task(id: String, time: Duration)

并且有一个List[(Human, Task)] 包含以下元素:

("H2", Task("T3", 5 minute))

("H3", Task("T1", 10 minute))

("H1", Task("T1", 10 minute))

("H1", Task("T2",  5 minute))

现在我想在功能上检查关闭元素是否具有相同的持续时间,如果是,则按人类 ID 对它们进行排序。

在这种情况下,最终列表的元素排序如下:

("H2", Task("T3", 5 minute))

("H1", Task("T1", 10 minute))

("H3", Task("T1", 10 minute))

("H1", Task("T2",  5 minute))

我尝试使用 sortBy 这样做,但我这样做的方式是,最终列表将按 Human ID 完全排序,而不是比较时间。

有人知道我该怎么做吗?

【问题讨论】:

  • “你的做法”是什么?

标签: scala list sorting functional-programming


【解决方案1】:

你的问题有点混乱。你说你有一个List(Human,Task) 元组,但是你描述了一个(String,Task) 元组的集合。

这是一种根据您描述的规则对List[Human] 进行排序的方法。

def sortHumans(hs: List[Human]): List[Human] =
  if (hs.isEmpty) Nil
  else {
    val target = hs.head.task.time
    hs.takeWhile(_.task.time == target).sortBy(_.id) ++
      sortHumans(hs.dropWhile(_.task.time == target))
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2017-12-11
    • 2018-10-04
    • 2013-05-25
    • 2010-09-20
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多