2017-01-20 167 views
3

我不知道为什么会出现在斯卡拉Set没有sortBy方法有用于SeqList因为它延伸Iterable,以及...斯卡拉:为什么没有排序设置?

+1

单词“排序”请注意'Iterable'并不意味着顺序,只是可以通过所有元素。 –

+1

@JosepPrat是有区别的之间有序和分类:http://stackoverflow.com/questions/1084146/what-is-the-difference-between-an-ordered-and-a-sorted-collection –

+1

好视回答你链接说,排序只能发生,如果有秩序,所以评论是完全有效的 –

回答

4

一个Set是一个比较有序的(这就是为什么它是可迭代),但不 - 分类元素的集合。 如果你想要的元素进行排序,你必须使用一个SortedSet实现(TreeSet),在那里你可以创建一个新的实例

更新时提供的排序:排序之间的区别和分类是不是真的清楚:你可以说一个列表进行排序,但可能不排序和地图是无序和不排序的,但图的执行需要,以保持它的元素在内存(RAM,硬盘,任何你想要的支持),以及记忆总是有序的,所以它给任何集合(例如插入订单或存储订单)提供一些订单。

这个undefinition的例子可以看出Scala的API中:在定义的SortedSet,构造函数是:

new TreeSet()(implicit ordering: Ordering[A]) 

所以来代替的“排序”

+0

它没有排序的任何理由? – Simon

+0

哈希表不按其性质排序。可迭代并不意味着它是有序的(因为添加元素的顺序可能会影响其迭代的顺序)。 – adamwy

+0

@Simon我猜是因为设置的数学概念是没有排序,内部的元素没有层次 –