从Scala的Map中选择前N个元素

6

有没有一种优雅的方法从Map中提取前N个元素?

我可以创建一个新的Map并迭代选择的值,但是否有函数可以完成此操作?

3个回答

14

根据Maptake方法文档:

选择前n个元素。

注意:如果基础集合类型是无序的,可能会在不同运行中返回不同的结果。

对于映射表而言,该集合没有排序,因此不能指望得到前n个元素,事实上,对于映射表来说,n个元素的概念根本不存在。

但是take会给你一些前n个元素,这听起来就是你想要的:

scala> Map('a -> 1, 'b -> 2, 'c -> 3).take(2)
res1: scala.collection.immutable.Map[Symbol,Int] = Map('a -> 1, 'b -> 2)

在这种情况下,您碰巧获得了定义中先出现的两个元素,但不要指望这种情况会经常发生。


1
听起来你正在寻找一个SortedMap,同时也需要像其他人讨论的那样使用take(n)

0
scala> val map = Map[String,Int]("one"->1,"two"->2,"three"->3)
map: scala.collection.immutable.Map[String,Int] = 
                           Map(one -> 1, two -> 2, three -> 3)

scala> val n = 2
n: Int = 2

scala> val firstN = map.take(n)
firstN: scala.collection.immutable.Map[String,Int] = Map(one -> 1, two -> 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接