gpt4 book ai didi

scala - 如何按其他列表的排序顺序对 Scala 对象列表进行排序?

转载 作者:行者123 更新时间:2023-12-04 20:14:55 24 4
gpt4 key购买 nike

我在 Scala 中有以下 2 个列表。

    case class Parents(name: String, savings: Double)
case class Children(parentName: String, debt: Double)

val parentList:List[Parents] = List(Parents("Halls",1007D), Parents("Atticus",8000D), Parents("Aurilius",900D))

val childrenList:List[Children] = List(Children("Halls",9379.40D), Children("Atticus",9.48D), Children("Aurilius",1100.75D))

val sortedParentList:List[Parents] = parentList.sortBy(_.savings).reverse

// sortedParentList = List(Parents(Atticus,8000.0), Parents(Halls,1007.0), Parents(Aurilius,900.0))

现在我的 parenList 按降序排列,我希望我的 childrenList 按照它遵循 parentList 顺序的方式排序。即预期顺序将遵循

// sortedParentList = List(Children(Atticus,9.48D), Children(Halls,9379.40D), Children(Aurilius,1100.75D))

最佳答案

好吧,如果您知道两个列表最初的顺序相同(您始终可以通过按名称对两者进行排序来确保这一点),则可以一次性对它们进行排序:

 val (sortedParentList, sortedChildrenList) = (parents zip children)
.sortBy(-_._1.savings)
.unzip

或者您可以提前定义顺序,并使用它对两个列表进行排序:

val order = parentList.map(p => p.name -> -p.savings).toMap
val sortedParentList = parentList.sortBy(order(_.name))
val sortedChildrenList = childrenList.sortBy(order(_.parentName))

或者你可以先对 parent 排序(也许,他们已经排序好了),然后再定义顺序:

val order = sortedParentList.zipWithIndex.map { case(p, idx) => p.name -> idx }.toMap
val sortedChildrenList = childrenList.sortBy(c => order(c.parentName))

关于scala - 如何按其他列表的排序顺序对 Scala 对象列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45030430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com