2013-04-28 2 views
1

Например, как можно отсортировать этот массив по точек и имя с помощью функции, как в Scala sortWith:Сортировать Массив Карты более чем одного значения

val arr = Array(
    Map("name"->"A","points"->"10"), 
    Map("name"->"B","points"->"9"), 
    Map("name"->"C","points"->"8")) 

Сортировать только точки:

arr.sortWith(_.get("points").getOrElse("0").toLong < _.get("points").getOrElse("0").toLong)` 

ответ

3

Вы можете использовать SortBy функция:

arr.sortBy((m: Map[String, String]) => ((m.getOrElse("points", "0").toLong, m.get("name")))) 

Этот выше фрагмент будет сортировать по первым пунктам (от самого маленького до самого большого), а затем разбить любые связи, а затем в алфавитном порядке по имени (по возрастанию).

Функция «компаратор», переданная в функцию sortBy, может возвращать значение, которое является кортежем (один или несколько дискриминаторов для сортировки). Поэтому в этом случае я возвращаюсь (очки, имя)

Смежные вопросы