gpt4 book ai didi

scala - 对通用对象列表进行排序

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

我需要编写一个对 Seq[T] 对象执行排序的通用代码。我知道在我们知道基类及其属性之前不可能执行排序操作。看完这个answer后我使用了这段代码,我的要求是处理尽可能多的自定义数据类型。

case class Country(name: String, id : Int)
type CountrySorter = (Country, Country) => Boolean
def byName : CountrySorter = (c1:Country, c2:Country) => c1.name < c2.name
def byId : CountrySorter = (c1:Country, c2:Country) => (c1.id < c2.id)

val sortingMap = Map[String, CountrySorter](
"sortByCountryName" -> byName ,
"soryByCountryId" -> byId
)
<小时/>

函数调用

def sort[T]( input : Seq[T], criteria : String) : Seq[T] = {
input.sortWith(sortingMap(criteria))
}

input.sortWith(sortingMap(criteria)) 这里我收到错误,因为 sortWith 函数仅接受 Country类型而不是 T 类型。

最佳答案

如果您想使用 sortWith 定义排序,可以采用以下方法:

case class Country(name: String, id : Int)

type Sorter[T] = (T, T) => Boolean
type CountrySorter = Sorter[Country]

def byName : CountrySorter = (c1, c2) => c1.name < c2.name
def byId : CountrySorter = (c1, c2) => c1.id < c2.id

def sort[T](input: Seq[T], sorter: Sorter[T]): Seq[T] = {
input.sortWith(sorter)
}

val countries = List(Country("Australia", 61), Country("USA", 1), Country("France", 33))

sort(countries, byName)
// res1: Seq[Country] = List(Country(Australia,61), Country(France,33), Country(USA,1))

sort(countries, byId)
// res2: Seq[Country] = List(Country(USA,1), Country(France,33), Country(Australia,61))

关于scala - 对通用对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134848/

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