按多个值对地图数组排序

时间:2013-04-28 02:46:44

标签: scala sorting multiple-columns

例如,如何使用像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)`

1 个答案:

答案 0 :(得分:3)

您可以使用 sortBy 功能:

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

上面的代码片段将按点排序(从最小到最大),然后按名称(asc)按字母顺序打破任何关系。

传入 sortBy 函数的函数“comparator”可能会返回一个元组值(一个或多个要排序的判别符)。所以在这种情况下,我回来了(点,名字)