【发布时间】:2019-03-13 22:49:33
【问题描述】:
在 Julia 0.6 中,struct 是不可变的,所以我希望函数 func1()、func2() 和 func3() 用 struct 键为字典提供只产生一条记录:
Dict(KEY("Bob", "NY", "[120 10]")=>true)
但事实并非如此,当我将字符串放入 key 结构的变量中时,键是唯一的,而当我直接使用相同的字符串时,键不是唯一的。更奇怪的是,如果我在 func3() 中使用 split 生成变量 x,y,z,则从该变量生成的键不是唯一的。
由于这些细微之处很容易出现错误,所以我在这里展示一个简单的例子:)
struct KEY
A::String
B::String
C::String
end
function func1(d::Dict{KEY, Bool})
for i = 1:3
x = "Bob"
y = "NY"
z = "[120 10]"
d[KEY(x,y,z)] = true
end
end
function func2(d::Dict{KEY, Bool})
x = "Bob"
y = "NY"
z = "[120 10]"
d[KEY(x,y,z)] = true
d[KEY(x,y,z)] = true
d[KEY("Bob","NY","[120 10]")] = true
d[KEY("Bob","NY","[120 10]")] = true
end
function func3(d::Dict{KEY, Bool})
for i = 1:3
str = "Bob;NY;[120 10]"
(x,y,z) = split(str, ";")
d[KEY(x,y,z)] = true
end
end
function main()
d = Dict{KEY,Bool}()
func1(d)
println("func1 ", d)
d = Dict{KEY,Bool}()
func2(d)
println("func2 ", d)
d = Dict{KEY,Bool}()
func3(d)
println("func3 ", d)
end
main()
输出是:
func1 Dict(KEY("Bob", "NY", "[120 10]")=>true)
func2 Dict(KEY("Bob", "NY", "[120 10]")=>true,KEY("Bob", "NY", "[120 10]")=>true,KEY("Bob", "NY", "[120 10]")=>true)
func3 Dict(KEY("Bob", "NY", "[120 10]")=>true,KEY("Bob", "NY", "[120 10]")=>true,KEY("Bob", "NY", "[120 10]")=>true)
【问题讨论】:
标签: dictionary key julia