Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Julia : construct Dictionary with tuple values

Is there a possibility to construct dictionary with tuple values in Julia?

I tried

dict = Dict{Int64, (Int64, Int64)}()
dict = Dict{Int64, Tuple(Int64, Int64)}()

I also tried inserting tuple values but I was able to change them after so they were not tuples.

Any idea?

Edit:

parallel_check = Dict{Any, (Any, Any)}()

for i in 1:10
    dict[i] = (i+41, i+41)
end

dict[1][2] = 1 # not able to change this way, setindex error!

dict[1] = (3, 5) # this is acceptable. why?
like image 684
M.Puk Avatar asked Oct 19 '25 08:10

M.Puk


1 Answers

The syntax for tuple types (i.e. the types of tuples) changed from (Int64,Int64) in version 0.3 and earlier to Tuple{Int64,Int64} in 0.4. Note the curly braces, not parens around Int64,Int64. You can also discover this at the REPL by applying the typeof function to an example tuple:

julia> typeof((1,2))
Tuple{Int64,Int64}

So you can construct the dictionary you want like this:

julia> dict = Dict{Int64,Tuple{Int64,Int64}}()
Dict{Int64,Tuple{Int64,Int64}} with 0 entries

julia> dict[1] = (2,3)
(2,3)

julia> dict[2.0] = (3.0,4)
(3.0,4)

julia> dict
Dict{Int64,Tuple{Int64,Int64}} with 2 entries:
  2 => (3,4)
  1 => (2,3)

The other part of your question is unrelated, but I'll answer it here anyway: tuples are immutable – you cannot change one of the elements in a tuple. Dictionaries, on the other hand are mutable, so you can assign an entirely new tuple value to a slot in a dictionary. In other words, when you write dict[1] = (3,5) you are assigning into dict, which is ok, but when you write dict[1][2] = 1 you are assigning into the tuple at position 1 in dict which is not ok.

like image 131
StefanKarpinski Avatar answered Oct 22 '25 03:10

StefanKarpinski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!