6

是否有一种从 Map 中提取前“N”个元素的优雅方法?

我可以创建一个新的 Map 并遍历要选择的值,是否有实现此功能的函数?

4

3 回答 3

14

来自方法的文档takeMap

选择前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)

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

于 2013-08-02T14:03:05.840 回答
1

听起来您正在寻找SortedMap,以及take(n)其他人讨论的内容。

于 2013-08-02T16:23:59.047 回答
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)
于 2013-08-02T14:02:13.773 回答