Scala: как я могу отсортировать массив кортежей их вторым элементом?

существует ли способ в Scala отсортировать массив использования кортежей и произвольной функции сравнения? В особенности я должен отсортировать и массив кортежей их вторым элементом, но я хотел знать, что общая техника сортирует массивы кортежей.

Спасибо!

50
задан pau.estalella 12 April 2010 в 21:08
поделиться

6 ответов

Вы можете использовать этот код:

scala> val v = Array(('a', 2), ('b', 1))
v: Array[(Char, Int)] = Array((a,2), (b,1))

scala> scala.util.Sorting.stableSort(v,
     | (e1: (Char, Int), e2: (Char, Int)) => e1._2 < e2._2)

scala> v
res11: Array[(Char, Int)] = Array((b,1), (a,2))

К сожалению, похоже, что Scala не может определить тип массива, переданного в stableSort . Надеюсь, для тебя это нормально.

23
ответ дан 7 November 2019 в 10:31
поделиться
val l = List((2, 1), (3, 2), (0, 3))
l sort { case(a, b) => a > b }
1
ответ дан 7 November 2019 в 10:31
поделиться

Вы вероятно, понадобится def stableSort [K] (a: Seq [K], f: (K, K) => Boolean): Array [K] из scala.util.Sorting.
Ваша функция сравнения будет выглядеть примерно так: _._ 2 <_._ 1

1
ответ дан 7 November 2019 в 10:31
поделиться

В scala 2.8 есть метод sortBy. Вот простой вариант использования:

scala> val arr = Array(("One",1),("Two",2),("Four",4),("Three",3))
arr: Array[(java.lang.String, Int)] = Array((One,1), (Two,2), (Four,4), (Three,3))

scala> arr.sortBy(_._2)
res0: Array[(java.lang.String, Int)] = Array((One,1), (Two,2), (Three,3), (Four,4))

scala>
123
ответ дан 7 November 2019 в 10:31
поделиться

2.7 и отсутствует:

(Array((2,3), (4,2), (1,5)).toList.sort (_._2 < _._2)).toArray
2
ответ дан 7 November 2019 в 10:31
поделиться

В Scala 2.8 (да, еще раз :) вы также можете сделать это:

val v = Array(('a', 2), ('b', 1))
scala.util.Sorting.stableSort(v)(manifest[(Char, Int)], Ordering.by(_._2))

В конкретном случае пар это также может работать для сортировки сначала вторым элементом, а затем первым:

scala.util.Sorting.stableSort(v)(manifest[(Char, Int)], Ordering.by(_.swap))
3
ответ дан 7 November 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: