scala 排序
这是博客文章,最初写于2014年5月中旬。我似乎也每3个月左右编写一次此代码,然后我忘记了。 因此,我需要一个触发器来准确记住Scala Maps的工作方式并按键对条目进行排序。
让我们来看看Scala REPL。
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
我们将创建一个与Integer元素关联的String集合的映射。 此数据可能已存储在键值存储中,或者您可能对处理统计数据也有类似的要求。
scala> val map = Map( "Jane" -> 3, "Peter" -> 10, "Steve" -> 1, "Anna" -> 5, "Megan" -> 15, "Brian" -> 7, "Sally" -> 8 )
map: scala.collection.immutable.Map[String,Int] = Map(Megan -> 15, Anna -> 5, Jane -> 3, Brian -> 7, Steve -> 1, Sally -> 8, Peter -> 10)
为了排序数据结构,我们然后将映射转换为元组的列表集合。
scala> map.toList
res1: List[(String, Int)] = List((Megan,15), (Anna,5), (Jane,3), (Brian,7), (Steve,1), (Sally,8), (Peter,10))
现在我们可以使用元组进行排序。 这是值的降序:
scala> map.toList.sortWith( (x,y) => x._2 > y._2 )
res2: List[(String, Int)] = List((Megan,15), (Peter,10), (Sally,8), (Brian,7), (Anna,5), (Jane,3), (Steve,1))
这是值的升序
scala> map.toList.sortWith( (x,y) => x._2 < y._2 )
res3: List[(String, Int)] = List((Steve,1), (Jane,3), (Anna,5), (Brian,7), (Sally,8), (Peter,10), (Megan,15))
这是另一个提示。 假设您需要创建100个不同产品项的直方图。 您可以创建此数据结构
一开始就一成不变。 但是,在构建统计信息时,您可能更喜欢使用可变的集合图。
val buckets = collection.mutable.Map.empty[Int,Int]
buckets ++= (1 to 100).toList.map{ x => (x,0) }.toMap
现在,在统计信息收集部分中,您可以编写如下内容:
val keyName: String = ???
val keyIndex: Integer = convertNameToIndex(keyName)
buckets(keyIndex) = buckets.getOrElse(keyIndex, 0) + 1
然后将排序后的数据渲染到前十个产品中
val sortedProducts = buckets.toList.sortWith{ (x,y) => x._2 > y._2 }
println(sortedProducts.take(10))
就这样。
翻译自: https://www.javacodegeeks.com/2014/06/scala-maps-and-sorting.html
scala 排序