## Julia Community ðŸŸ£

Steven Siew

Posted on • Updated on

# Sets under Julia

Sets are useful concepts in Julia but few people uses them so in this article we shall describe the basic concept of Sets and how to use them

Construction

julia>  evenunderten = Set([2,4,6,8])
Set{Int64} with 4 elements:
4
6
2
8

julia> oddunderten = Set([1,3,5,7,9])
Set{Int64} with 5 elements:
5
7
9
3
1

You can use basic Set operators

julia> numbersunderten = union(evenunderten,oddunderten)
Set{Int64} with 9 elements:
5
4
6
7
2
9
8
3
1

julia> issubset(evenunderten,numbersunderten)
true
julia> bothevenandoddunderten = intersect(evenunderten,oddunderten)
Set{Int64}()

julia> primesunderten = Set([2,3,5,7])
Set{Int64} with 4 elements:
5
7
2
3

julia> evenandprime = intersect(evenunderten,primesunderten)
Set{Int64} with 1 element:
2
julia> nonprimeevens = setdiff(evenunderten,primesunderten)
Set{Int64} with 3 elements:
4
6
8

Get the size of an existing Set

julia> length(numbersunderten)
9

Checking if a set contains a specific element

julia> 16 in numbersunderten
false

julia> 6 in numbersunderten
true

Adding an element to an existing Set

julia> push!(evenunderten,0)
Set{Int64} with 5 elements:
0
4
6
2
8

julia> evenunderten
Set{Int64} with 5 elements:
0
4
6
2
8

Deleting a specific element from an existing Set

julia> delete!(evenunderten,0)
Set{Int64} with 4 elements:
4
6
2
8

julia> evenunderten
Set{Int64} with 4 elements:
4
6
2
8

Get all elements of a Set

@inline function elementsofset(S::Set)
return [ element for element in S ]
end

julia> elementsofset(evenunderten)
4-element Vector{Int64}:
4
6
2
8

Pop out the smallest element of a set

function popsmallest!(S::Set)
if length(S) == 0
return nothing
end
local smallest = minimum(elementsofset(S))
delete!(S,smallest)
return smallest
end

julia> popsmallest!(evenunderten)
2

julia> evenunderten
Set{Int64} with 3 elements:
4
6
8

Find all even elements of a set

julia> filter(iseven,elementsofset(numbersunderten))
4-element Vector{Int64}:
4
6
2
8

Find all odd elements of a set

julia> filter(!iseven,elementsofset(numbersunderten))
5-element Vector{Int64}:
5
7
9
3
1

In Statistics you can do sampling without replacement, here we can do it with Sets

julia> function samplingwithoutreplacement(S::Set)
local sample = rand(S)
delete!(S,sample)
return sample
end
samplingwithoutreplacement (generic function with 1 method)

julia> a = samplingwithoutreplacement(evenunderten)
4

julia> b = samplingwithoutreplacement(evenunderten)
6

julia> evenunderten
Set{Int64} with 1 element:
8

We can use this to deal out 4 cards out of a pack of 52 playing cards

julia> playingcardset = Set(  reduce(vcat, [ "\$(k) of \$(suite)" for k = 1:13 , suite = ["Diamond","Heart","Spade","Club"] ] )  )
Set{String} with 52 elements:
"2 of Club"
"1 of Diamond"
"5 of Club"
"4 of Club"
"7 of Heart"
"2 of Diamond"
"8 of Diamond"
"10 of Diamond"
"11 of Club"
"13 of Diamond"
"5 of Diamond"
â‹®

julia> firstcard = samplingwithoutreplacement(playingcardset)
"1 of Diamond"

julia> secondcard = samplingwithoutreplacement(playingcardset)
"6 of Heart"

julia> thirdcard = samplingwithoutreplacement(playingcardset)

julia> fourthcard = samplingwithoutreplacement(playingcardset)

Now we can simulate Adam and Eve playing poker.

Set{Any}()

julia> eve = Set([])
Set{Any}()

julia> playingcardset = Set(  reduce(vcat, [ "\$(k) of \$(suite)" for k = 1:13 , suite = ["Diamond","Heart","Spade","Club"] ] )  )
Set{String} with 52 elements:
"2 of Club"
"1 of Diamond"
"5 of Club"
"4 of Club"
"7 of Heart"
"2 of Diamond"
"8 of Diamond"
"10 of Diamond"
"11 of Club"
"13 of Diamond"
"5 of Diamond"
â‹®

julia> for card = 1:5
push!(eve,samplingwithoutreplacement(playingcardset))
end

Set{Any} with 5 elements:
"6 of Club"
"9 of Heart"
"5 of Heart"
"12 of Club"
"9 of Club"

julia> eve
Set{Any} with 5 elements:
"6 of Heart"
"1 of Club"
"7 of Heart"

BambOoxX

Hi, I am not a user of Sets but I'm wondering, all of what you described can be achieved by using Vectors, what is the difference then ?

Steven Siew

All of what I describe can be done with vectors but I am showing you how to do it with Sets. The reason is that you can use Mathematical logic to deal with complex ideas using Sets.

BambOoxX

Just to make it practical, do you have an example of such idea ?