ZetCode

Julia 字典

最后修改于 2023 年 10 月 25 日

在本文中,我们将在 Julia 中使用字典。

字典是键/值对的集合。字典使用 Dict 类型创建。

字典也称为映射或关联数组。

简单示例

在第一个示例中,我们在 Julia 中构建了一个简单的字典。

main.jl
d = Dict("sk" => "Slovakia", "ru" => "Russia", 
    "de" => "Germany", "no" => "Norway")

println(d)

println(d["sk"])
println(d["no"])

创建了一个包含几个国家的字典。值是国家名称,键是国家的缩写。

d = Dict("sk" => "Slovakia", "ru" => "Russia", 
    "de" => "Germany", "no" => "Norway")

字典使用 Dict 类型创建。每个条目都有一个键和一个值;它们用 => 字符分隔。条目之间用逗号分隔。

println(d)

我们打印整个字典。

println(d["sk"])
println(d["no"])

我们打印了两个国家的名字。国家通过它们的键进行访问。键在方括号内指定。

$ julia main.jl
Dict("ru" => "Russia", "sk" => "Slovakia", "no" => "Norway", "de" => "Germany")
Slovakia
Norway

遍历字典

在下一个示例中,我们将使用 for 循环遍历字典。

main.jl
d = Dict(:a => "book", :b => "storm", :c => "pencil", :d => "green")

for (k, v) in d 
    println("$(k): $(v)")
end

我们定义了一个单词字典。键是符号,值是单词。我们使用 for 循环遍历字典。

for (k, v) in d 
    println("$(k): $(v)")
end

在每个循环中,当前条目的键和值分别存储在 kv 变量中。然后将它们打印到控制台。

$ julia main.jl
a: book
b: storm
d: green
c: pencil

keys 和 values 函数

我们可以使用 keysvalues 函数来获取字典的所有键和值。

main.jl
d = Dict(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

println(keys(d))
println(values(d))

for e in keys(d)
    println(e)
end

for e in values(d)
    println(e)
end

该程序使用了 keysvalues 函数。

d = Dict(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

我们定义了一个单词字典。

println(keys(d))

我们获取了字典的所有键。该函数返回一个数组。

$ julia main.jl
[:a, :b, :d, :c]
["e-books", "storm", "green", "pencil"]
a
b
d
c
book
storm
green
pencil

类型

下一个示例处理类型。

main.jl
d = Dict{Symbol, String}(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

println(keytype(d))
println(valtype(d))

我们显式定义了字典的键/值类型,并使用 keytypevaltype 函数在运行时确定键和值的类型。

d = Dict{Symbol, String}(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

我们可以在 {} 方括号内显式指定键和值的类型。

$ julia main.jl
Symbol
String

合并字典

merge 函数可用于合并字典。

main.jl
d1 = Dict(:a => "book", :b => "storm", :c => "pencil")
d2 = Dict(:d => "water", :e => "form", :f => "lamp")

d = merge(d1, d2)
println(d)

在示例中,我们使用 merge 合并了两个单词字典。

$ julia main.jl
Dict(:a => "book", :b => "storm", :f => "lamp", :d => "water", 
    :e => "form", :c => "pencil")

haskey 函数

使用 haskey 函数,我们可以确定字典是否包含给定的键。

main.jl
d = Dict(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

if haskey(d, :c)
    println("the dictionary contains the :c key")
else
    println("the dictionary does not contain the :c key")
end

程序检查字典是否包含 :c 键。

in 运算符

我们可以使用 in 运算符检查一个条目是否在字典中。

main.jl
d = Dict(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

p = Pair(:a, "book")

if p in d 
    println("the $(p) is in the dictionary")
else
    println("the item is not in the dictionary")
end

程序确定定义的字典是否包含 Pair(:a, "book")


我们还可以使用 运算符。(键入时使用 \in\notin)。

main.jl
d = Dict(:a => "book", :b => "storm", 
    :c => "pencil", :d => "green")

p1 = Pair(:a, "book")

if p1 ∈ d 
    println("the $(p1) is in the dictionary")
else
    println("the item is not in the dictionary")
end

p2 = Pair(:e, "war")

if p2 ∉ d 
    println("the $(p2) is not in the dictionary")
else
    println("the item is in the dictionary")
end

程序使用了 运算符。

get 和 get! 函数

get 函数返回给定键存储的值,如果不存在该键的映射,则返回给定的默认值。get! 函数返回给定键存储的值,如果不存在该键的映射,则存储给定的默认键值对并返回它。

main.jl
d = Dict(:a => "book", :b => "storm", :c => "pencil", 
    :d => "car", :e => "book")

println(get(d, :a, "not present"))
println(d)

println(get(d, :f, "not present"))
println(d)

println(get!(d, :f, "cloud"))
println(d)

在程序中,我们使用了 getget! 函数。

$ julia getfuns.jl
book
Dict(:a => "book", :b => "storm", :d => "car", :e => "book", :c => "pencil")
not present
Dict(:a => "book", :b => "storm", :d => "car", :e => "book", :c => "pencil")
cloud
Dict(:a => "book", :b => "storm", :f => "cloud", :d => "car", :e => "book", :c => "pencil")

添加元素

在下一个示例中,我们将新条目添加到字典中。

main.jl
d = Dict(:a => "book", :b => "storm", :c => "pencil", :d => "green")

println(d)

push!(d, :e => "cloud")
d[:x] = "sea"

println(d)

在程序中,我们添加了两个条目。

push!(d, :e => "cloud")

在第一种情况下,我们使用了 push! 函数。

d[:x] = "sea"

另一种方法是使用赋值运算符。

$ julia main.jl
Dict(:a => "book", :b => "storm", :d => "green", :c => "pencil")
Dict(:a => "book", :b => "storm", :d => "green", :e => "cloud", :c => "pencil", :x => "sea")

删除元素

我们可以使用 delete!pop! 删除元素。

main.jl
d = Dict(:a => "book", :b => "storm", :c => "pencil", 
    :d => "car", :e => "book")

delete!(d, :a)
println(d)

r = pop!(d)
println(r)
println(d)

在程序中,我们删除了两个元素。

delete!(d, :a)

我们删除了键为 :a 的条目。

r = pop!(d)

pop! 删除字典中的一个条目并返回它。如果集合是有序容器,则返回最后一个条目;对于无序容器,则返回一个任意的元素。

$ julia main.jl
Dict(:b => "storm", :d => "car", :e => "book", :c => "pencil")
:b => "storm"
Dict(:d => "car", :e => "book", :c => "pencil")

来源

Julia 集合文档

在本文中,我们使用 Julia 中的字典。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Julia 教程