从Scala中的地图中选择第一个“N”元素

时间:2013-08-02 13:55:08

标签: scala

是否有一种从地图中提取第一个'N'元素的优雅方法?

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

3 个答案:

答案 0 :(得分:13)

来自take的{​​{1}}方法来自Map

  

选择第一个 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 :(得分:1)

听起来像是在寻找SortedMap以及其他人讨论过的take(n)

答案 2 :(得分: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)