我有形式的元组(Boolean, Int, String)
.
我想定义Ordering,按以下顺序对元组进行排序:
布尔 - 逆序
Int - 逆序
字符串 - 常规订单
例:
对于元组:Array((false, 8, "zz"), (false,3, "bb"), (true, 5, "cc"),(false, 3,"dd"))
.
订购应该是:
(true, 5, "cc")
(false, 8,"zz")
(false, 3, "bb")
(false, 3, "dd")
Run Code Online (Sandbox Code Playgroud)
我找不到一种方法来定义一些反向排序和一些常规.
Rég*_*les 12
在这种特定情况下的直接解决方案是sortBy
在元组上使用,在运行中进行修改以"反转"第一和第二元素,以便最终排序顺序:
val a = Array((false, 8, "zz"), (false,3, "bb"), (true, 5, "cc"),(false, 3,"dd"))
a.sortBy{ case (x,y,z) => (!x, -y, z) }
Run Code Online (Sandbox Code Playgroud)
对于不能轻易"反转"某个值的情况(比如说这是一个参考对象,并且你对它们有一个不透明的排序),你可以改为使用
sorted
并明确地传递一个排序,这个排序构造成颠倒第一个顺序.和第二个元素(您可以Ordering.reverse
用来反转排序):
val myOrdering: Ordering[(Boolean, Int, String)] = Ordering.Tuple3(Ordering.Boolean.reverse, Ordering.Int.reverse, Ordering.String)
a.sorted(myOrdering)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4595 次 |
最近记录: |