Julia:用元组值构造Dictionary

时间:2016-04-07 14:31:57

标签: dictionary tuples julia

是否有可能在Julia中使用元组值构造字典?

我试过

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

我也尝试插入元组值,但是之后我就能够更改它们,因此它们不是元组。

有什么想法吗?

编辑:

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?

1 个答案:

答案 0 :(得分:7)

元组类型的语法(即元组类型)从版本0.3及更早版本中的(Int64,Int64)更改为0.4中的Tuple{Int64,Int64}。请注意花括号,而不是Int64,Int64周围的parens。您还可以通过将typeof函数应用于示例元组来在REPL中发现此信息:

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

所以你可以像这样构建你想要的字典:

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)

你问题的另一部分是无关的,但无论如何我会在这里回答:元组是不可变的 - 你不能改变元组中的一个元素。另一方面,字典是可变的,因此您可以将全新的元组值分配给字典中的插槽。换句话说,当您编写dict[1] = (3,5)时,您正在分配到dict,这是正常的,但是当您编写dict[1][2] = 1时,您将分配到1中位置的元组{ {1}}这不行。