scala 排序_Scala地图和排序

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 排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值