Does anyone know what governs this? Is it safe to assume that the order is fixed as is multiple call to `collect(s)`

gives the same Array (based on my limited experimentation)?

probably, but you shouldnâ€™t rely on this because `Set`

is designed to have arbitrary order when you collect/iterate through them.

For a given Julia version, if the set is constructed in the same way, the order of iteration is fixed. The second condition matters, as e.g. on the version I use, I get:

```
julia> Set([11, 2])
Set{Int64} with 2 elements:
11
2
julia> Set([2, 11])
Set{Int64} with 2 elements:
2
11
julia> Set([2, 11]) == Set([11, 2])
true
```

To build on your example:

```
julia> s = Set([11,2])
Set{Int64} with 2 elements:
11
2
julia> ss = Set([2,11])
Set{Int64} with 2 elements:
2
11
julia> s == ss
true
julia> collect(s)
2-element Vector{Int64}:
11
2
julia> collect(s)
2-element Vector{Int64}:
11
2
julia> collect(ss)
2-element Vector{Int64}:
2
11
julia> collect(ss)
2-element Vector{Int64}:
2
11
julia> collect(s) == collect(ss)
false
julia>
```

Set is a mathematical concept defined by â€śTwo sets are equal if and only if they have precisely the same elementsâ€ť (Wikipedia). Sets are useful if you want to remove duplicates and for cases where you donâ€™t care about the ordering.

Therefore, itâ€™s not a good idea to assume the order is fixed when you do `collect(s)`

.

Depending on what you need exactly, maybe `sort(collect(s))`

would be a solution.

Or if you need to preserve the ordering of the first time an element is encountered using the function `unique`

will work, instead of converting to a set and back.

https://docs.julialang.org/en/v1/base/collections/#Base.unique

Thanks guys. I have no clue how `Set`

works internally (probably build upon `Dict`

or `Array`

), and based on this `collect`

would probably give a â€śnaturalâ€ť ordering in the resulting `Array`

container. I am purely guessing here but the order could depends on memory layout.

@WschW thanks for this tip (I was not aware of the order-preserving property of `unique`

) but it is not what I am after.

`Set`

does not guarantee any kind of ordering, itâ€™s by definition an unordered data structure.

DataStructures.jl has an `OrderedSet`

type which guarantees the insertion order when iterated over.