scala.collection.Seq.groupBy()函数是否保留顺序?

时间:2016-10-21 19:14:10

标签: scala collections seq

我想弄明白:

  1. 如果scala.collection.Seq.groupBy()保留订单。这意味着如果我有List((true, 2), (true, 8)),并且通过第一个元素(布尔值)进行groupBy,那么我总是会得到一个真实的列表,它在8之前有2个。

  2. toMap的同样问题。这意味着如果我在提到的列表上执行toMap,我是否总是最终得到8为真关键,因为8在2之后出现并覆盖它?

  3. 我在scala文档中找不到任何有关实现的内容:scala doc。我正在尝试决定是否编写我自己的版本以确保订单得到保留。

    谢谢!

1 个答案:

答案 0 :(得分:6)

行为是documented

  

从键到可遍历集合的映射,如下所示   不变量持有:(xs groupBy f)(k) = xs filter (x => f(x) == k)

意味着它是以等于的方式定义的。

过滤器指定"保留元素的顺序。"

因此,是的,按指定保留排序。

同样,toMap说:

  

以后的密钥会覆盖重复的密钥:如果是这样的话   无序集合,结果映射中的哪个键是未定义的。

也就是说,有序集合中的最后一个键提供了值。