我想弄明白:
如果scala.collection.Seq.groupBy()
保留订单。这意味着如果我有List((true, 2), (true, 8))
,并且通过第一个元素(布尔值)进行groupBy,那么我总是会得到一个真实的列表,它在8之前有2个。
toMap的同样问题。这意味着如果我在提到的列表上执行toMap,我是否总是最终得到8为真关键,因为8在2之后出现并覆盖它?
我在scala文档中找不到任何有关实现的内容:scala doc。我正在尝试决定是否编写我自己的版本以确保订单得到保留。
谢谢!
答案 0 :(得分:6)
行为是documented:
从键到可遍历集合的映射,如下所示 不变量持有:
(xs groupBy f)(k) = xs filter (x => f(x) == k)
意味着它是以等于的方式定义的。
过滤器指定"保留元素的顺序。"
因此,是的,按指定保留排序。
同样,toMap说:
以后的密钥会覆盖重复的密钥:如果是这样的话 无序集合,结果映射中的哪个键是未定义的。
也就是说,有序集合中的最后一个键提供了值。