如何按特定值对 Scala 中的列表进行排序
How to sort list in Scala by specific values
我正在使用 squeryl,我有一个 类 的列表 (query.toList
)。 类 有一个 属性 ("status") 我想排序,但我想排序我认为不是字母或数字的顺序。例如,如果有 3 类 的列表:
(<Foo1>, <Foo2>, <Foo3>)
而Foo1.status被暂停,Foo2被批准,Foo3被拒绝,排序后变成:
(<Foo2>, <Foo3>, <Foo1>)
我想要总是先批准,总是最后暂停,批准后拒绝,等等。只是任意排序。我不确定如何很好地做到这一点。我可以进行多个查询并手动构建它,例如获得所有批准,然后获得所有拒绝并追加到该列表,获得所有暂停的追加等等,但这似乎非常繁重
你应该使用 sortBy
。然后,您可以实现自定义 Ordering[Status]
,或者将您的状态转换为自然排序的其他类型(如 int)。例如:
list.sortBy { f =>
f.status match {
case Approved => 0
case Rejected => 1
case Suspended => 2
}
}
我正在使用 squeryl,我有一个 类 的列表 (query.toList
)。 类 有一个 属性 ("status") 我想排序,但我想排序我认为不是字母或数字的顺序。例如,如果有 3 类 的列表:
(<Foo1>, <Foo2>, <Foo3>)
而Foo1.status被暂停,Foo2被批准,Foo3被拒绝,排序后变成:
(<Foo2>, <Foo3>, <Foo1>)
我想要总是先批准,总是最后暂停,批准后拒绝,等等。只是任意排序。我不确定如何很好地做到这一点。我可以进行多个查询并手动构建它,例如获得所有批准,然后获得所有拒绝并追加到该列表,获得所有暂停的追加等等,但这似乎非常繁重
你应该使用 sortBy
。然后,您可以实现自定义 Ordering[Status]
,或者将您的状态转换为自然排序的其他类型(如 int)。例如:
list.sortBy { f =>
f.status match {
case Approved => 0
case Rejected => 1
case Suspended => 2
}
}