将字典的值和值导出为变量名和值

时间:2016-11-27 20:26:25

标签: julia

如何根据字典的键和值创建变量?以下摘录(如PHP)可能吗?

julia> d = Dict(
    "key1"    =>111,
    "key2"    =>222,
    "key3"    =>333
);
julia> extract(d)
julia> key1, key2, key3
(111,222,333)

2 个答案:

答案 0 :(得分:1)

k = collect(keys(d)) 

v = collect(values(d)) 

键和值都返回迭代器。 然后收集生成一个数组。

但请注意,您通常不需要这样做,只需使用

遍历字典即可
for (k, v) in d

答案 1 :(得分:1)

可以使用eval将新变量引入 global 范围:

julia> x = 1
1

julia> function testeval()
           eval(:(x = 5))
           return x
       end
testeval (generic function with 1 method)

julia> testeval()
5

julia> x # the global x has changed!
5 

extract函数可能如下所示:

julia> function extract(d)
           expr = quote end
           for (k, v) in d
               push!(expr.args, :($(Symbol(k)) = $v))
           end
           eval(expr)
           return
       end

julia> extract(d)

julia> key1, key2, key3
(111,222,333)

请注意,每个模块都有自己的全局范围。因此,这将将变量引入定义extract函数的模块的范围,即,如果在示例中在REPL处定义,则将Main模块引入eval模块。

使用cxx_stdlib时应该非常小心,并首先考虑其他方法,例如David P. Sanders和Dan Getz提到的方法。