Сортировать коллекцию значений на основе другой коллекции "Scala способом" - PullRequest
0 голосов
/ 20 марта 2020

Я должен отсортировать коллекцию значений в зависимости от набора ключей, которые у меня есть в виде подсписков другого списка. В настоящее время у меня есть следующий код, который делает работу правильно. Однако он использует изменяемую коллекцию, и я знаю, что это не лучший способ сделать это в Scala. Каков был бы "1004 * способ" сделать это? Спасибо.

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 Ответ

2 голосов
/ 20 марта 2020

Грубый набросок:

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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...