2017-01-20 163 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我猜是因爲設置的數學概念是沒有排序,內部的元素沒有層次 –