根据“ Scala方式”基于另一个集合对值的集合进行排序

时间:2020-03-20 11:09:57

标签: scala sorting functional-programming

我必须根据一组可以用作另一个列表的子列表的键来对值的集合进行排序。 目前,我有以下代码可以正常工作。但是,它使用可变的集合,我知道这不是在Scala中做到这一点的最佳方法。这样做的漂亮的“斯卡拉方式”是什么? 谢谢。

var sorted: IndexedSeq[IndexedSeq[Any]]
//sortKeys is a list of lists containing sorting properties (index,descending/ascending) 
for (i <- (0 until sortKeys).reverse) {
      val index = sortKeys(i).get(i).getIndex
      val desc = sortKeys.get(i).descending
      if (desc) {
        sorted = sorted.sorted { (t1: IndexedSeq, t2: IndexedSeq) => -t1(index).asInstanceOf[Comparable[Any]].compareTo(t2(index)) }
      } else {
        sorted = sorted.sorted { (t1: IndexedSeq, t2: IndexedSeq) => t1(index).asInstanceOf[Comparable[Any]].compareTo(t2(index)) }
      }
    }

1 个答案:

答案 0 :(得分:2)

草图:

val sortKeys = Seq( (1,true), (2, false))

val input = Seq( Array("a", "b", "c"), Array("a", "x", "c" )

sortKeys.foldRight(input){
  case ( (index, ascending), acc) =>
     acc.sortWith( (a,b) => if (ascending) a(index) > b(index)    
          else a(index) < b(index))
}