# How to call an element of a set?

Sorry for the very silly question. I’m trying to figure out how to call the elements of a set. For example in my below example, how do I get the first element, i.e., “Acg”?

A = Set([“Acg”, “Bdc”, “HH”]);

I tried, A[1], A(1), A{1}, but none of them worked.

The default `Set` in `Base` is not ordered - there is no “first” element. You may want to check out `OrderedSet` from `DataStructures.jl` instead, though usually depending on a specific ordering could also be served by using `unique` on a regular vector.

1 Like

I see.

Many thanks. In this case, it seems that Julia is trying to make something really simple really hard

It’s a design choice like any other - the common case for a `Set` is to be unordered, it just happens that some languages like python leak some internal ordering or even guarantee an order, locking them into that decision for backwards compatibility reasons. If the default here is unordered, julia is free to optimize the internal datastructure as much as we want, changing the order to provide more efficient storage etc.

Sure it has its pros and cons, but to me that is a weird thing to be split on. It may also be worthwhile to think about why you need a specific ordering of a `Set` in the first place, and if a different datastructure may be better suited to the task at hand.

4 Likes

Python doesn’t guarantee a set order and Julia leaks the internal order just as much as Python does, e.g. with `first(s)`.

Are you aware that you can use an array for this purpose? It is designed to retain the ordering of it’s elements:

``````A = ["Acg", "Bdc", "HH"]
A[1]
``````
3 Likes

Many thanks! That will do the trick.

This is probably the best solution. I wasn’t aware of it, because I’m a brand new Julia user. Many thanks!

A `Set` has a pretty mathematical meaning (i.e. unordered), it’s not just “a few items laid out in this way”.

Set also has no duplicates and different performance characteristics.