gpt4 book ai didi

Scala 动态列表排序

转载 作者:行者123 更新时间:2023-12-02 01:50:25 25 4
gpt4 key购买 nike

我正在寻找一种对满足以下要求的列表进行动态排序的简洁方法。

case class Person(name: String, middleName:Option[String], age:Integer) 

现在排序非常简单,但是如果这种排序是在 UI 之外进行的,用户将在其中进行列排序并且传回服务器的参数将只是列名称。对动态创建此排序功能有何建议?

提前致谢

**更新:

val sortByName = (p :Person) => p.name
val sortByMiddleName = (p: Person) => p.middleName

val mySortMap = Map("name" -> sortByName, "middleName" -> sortByMiddleName)

val sorted = persons.sortBy(mySortMap("name"))

** 更新#2

import scala.math.Ordering.Implicits._

type PersonSorter = (Person, Person) => Boolean
val sortByName: PersonSorter = (x:Person, y:Person) => x.name < y.name
// Implicits import takes care of the Option here...
val sortByMiddleName: PersonSorter = (x:Person, y:Person) => x.middleName < y.middleName

val sortingMap: PersonSorter = Map[String, PersonSorter]("name" -> sortByName, "middleName" -> sortByMiddleName)

(排除年龄,但完全一样)

现在当我有了我的 list 时,我可以很容易地做到这一点。

persons.sortWith(sortingMap("name"))

其中“name”是从UI传入的参数字符串。

最佳答案

应该这样做:

scala> val alice = Person("Alice", None, 20)
alice: Person = Person(Alice,None,20)

scala> val bob = Person("Bob", None, 21)
bob: Person = Person(Bob,None,21)

scala> val charlie = Person("Charlie", None, 18)
charlie: Person = Person(Charlie,None,18)

scala> val persons = List(alice, bob, charlie)
persons: List[Person] = List(Person(Alice,None,20), Person(Bob,None,21), Person(Charlie,None,18))

scala> persons.sortBy(p => (p.age, p.name))
res5: List[Person] = List(Person(Charlie,None,18), Person(Alice,None,20), Person(Bob,None,21))

scala> persons.sortBy(p => (p.name, p.age))
res6: List[Person] = List(Person(Alice,None,20), Person(Bob,None,21), Person(Charlie,None,18))

要按参数动态排序,您可以根据作为输入传递的参数定义自己的排序函数。因此,您可以编写一个函数,该函数返回一个传递给 persons.sortBy 的函数。传入的函数是排序函数,例如可以通过sortByAge。如果您需要按两个或多个参数进行排序,也是同样的想法。

scala> val sortByAge = (p :Person) => p.age
sortByAge: Person => Integer = <function1>

scala> persons.sortBy(sortByAge)
res9: List[Person] = List(Person(Charlie,None,18), Person(Alice,None,20), Person(Bob,None,21))

关于Scala 动态列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23091076/

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