阵列在朱莉娅中元组

时间:2016-05-27 18:16:20

标签: dictionary tuples julia

朱莉娅的新手,很困惑。

这是一个数组:

array=["a","b",1]

我定义了一个字典

dict=Dict()
dict["a","b"]=1

我想用'array'来定义字典

dict2 = Dict()
dict2[array[1:2]]=1

但它们不一样,

julia> dict
Dict{Any,Any} with 1 entry:
  ("a","b") => 1

julia> dict2
Dict{Any,Any} with 1 entry:
  Any["a","b"] => 1

如何使用'array'生成'dict'而不是'dict2'?感谢

3 个答案:

答案 0 :(得分:7)

您可以在执行任务时使用splat运算符:

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

julia> dict[array[1:2]...] = 1
1

julia> dict
Dict{Any,Any} with 1 entry:
  ("a","b") => 1

注意:您可以在Dict中指定类型,这样可以防止这些类型的错误:

dict = Dict{Tuple{String, String}, Int}()

答案 1 :(得分:5)

Julia将dict["a", "b"] = 1之类的内容解释为dict[("a", "b")] = 1,这是一个多维键被解释为元组键。

问题出现是因为array[1:2]的输出不是元组而是数组。您可以使用

将数组转换为元组
tup = tuple(array[1:2]...)

然后你可以

dict2 = Dict()
dict2[tup] = 1

注意使用splat运算符...解包array[1:2]来创建一个2元素元组而不是1元素元组(其唯一元素是2元素数组)在您不使用...时创建。

答案 2 :(得分:0)

在 Julia 1.6 中,以下代码有效:

array=["a","b",1]
tup = Tuple(array[1:2])
dict2 = Dict()
dict2[tup] = 1

julia> dict2
Dict{Any, Any} with 1 entry:
  ("a", "b") => 1

不再需要通过 splat 操作符