为什么设置显示奇数顺序

时间:2017-04-10 15:10:17

标签: scala

我有一个函数需要来自Set类型的两个参数:

def union[A](set1: Set[A], set2: Set[A]): Set[A] = {
  set1.foldLeft(set2){ (set, elt) => (set + elt) }
}

应用功能如下:

union(Set(3,4,5,6), Set(34,56,23))

我已经:

res2: Set[Int] = Set(5, 56, 6, 34, 3, 23, 4)

但我希望:

Set(3,4,5,6,34,56,23)

为什么我收到无序结果?

2 个答案:

答案 0 :(得分:4)

Set是一种无序数据类型,通常订单由实现决定,通常无法保证(更不用说保证插入顺序)。

获取您似乎想要的行为(不同,插入有序)我建议使用Listdistinct方法

(List(3,4,5,6) ++ List(34,56,23)).distinct
res0: List[Int] = List(3, 4, 5, 6, 34, 56, 23)

答案 1 :(得分:1)

设置不保留订单 - 如果您希望将最终结果作为最终结果,可以尝试这样做,请注意它会返回ArrayBuffer(然后您可以将其转换为您需要的):

union(Set(3,4,5,6), Set(34,56,23)).toSeq.sorted

当我们处理一个简单的Ordering(Int)时,我们不需要指定它的顺序,因为它是隐式完成的。由于您的union def采用任何类型,因此需要根据您传入的类型指定排序。See this on guidance on creating an Ordering