Словарь (Dict)
Создать пустой словарь:
d = Dict() # Dict{Any,Any} with 0 entries
Создать инициализированный значениями словарь:
Dict("A"=>1, "B"=>2)
Dict{ASCIIString,Int64} with 2 entries:
"B" => 2
"A" => 1
или
Dict([("A", 1), ("B", 2)])
или
Dict(zip(("A", "B", "C"), (1, 2, 3)))
Dict{ASCIIString,Int64} with 3 entries:
"B" => 2
"A" => 1
"C" => 3
здесь аргументами zip могут быть любые итерируемые объекты, лишь бы они создавали пары для словаря. Оставшиеся без пары будут отброшены:
Dict(zip(["A", "B"], [1, 2, 3]))
Dict{ASCIIString,Int64} with 2 entries:
"B" => 2
"A" => 1
Создание словаря через списковое включение
На каждой итерации создается пара ключ-значение (x=>y), поэтому на выходе создается словарь (а не массив):
f(x)= x%2==0
Dict(x=>f(x) for x in y)
Dict{Int64,Bool} with 5 entries:
4 => true
2 => true
3 => false
5 => false
1 => false
Добавить/заменить значение:
d[:a]="asd"
несуществующий ключ будет создан существующий - заменен. Возвращает переданное словарю значение (в данном случае "asd").
Добавить значение, если его нет:
get!(словарь, ключ, деф.значение)
get!(d1,:a,"asd")
или:
get!(функция.деф.знач, словарь, ключ)
Первым аргументом в get!
передается функция, не принимающая аргументов. Например, можно так:
d2=Dict()
get!(d2, :a) do
# здесь вычисляется значение по умолчанию, например,
time()
end
d2=Dict()
get!(time,d2,:b)
Получить значение
get(словарь, ключ, дефолтное_значение)
get(d2,:b,2.3)
1.469031305447414e9
julia> get(d2,:c,2.3)
2.3
или значение по умолчанию возвращает функция(без аргументов):
get(функция.деф.знач, словарь, ключ)
Проверка, наличия значения
haskey(collection, key) → Bool
Ошибко-небезопасное получение значения по ключу
d1=Dict()
get!(d1,:a,"asd")
d1[:a] # - "asd"
d1[:b] # - ERROR: KeyError: b not found
Несколько аргументов в квадратных скобках, превращаются в тюпл:
d1[(:c,:d)] = "ok"
# теперь d1 содержит: (:c,:d) => "ok"
d1[:c,:d] # - "ok"
# d1[:c,:d] было понято как d1[(:c,:d)]
Получить ключ
getkey(словарь, ключ, значение по умолчанию)
Удалить значение:
delete!(d, :b)
если ключа не было, словарь остается без изменений. Возвращается (ссылка на) измененный словарь.
Note: Как принято, функции, изменяющие аргументы на месте заканчиваются на "!".
Получить и удалить полученное из словаря
При отсутствии ключа, возвращается default, а если оно не предоставлено, то возникает ошибка.
pop!(collection, key[, default])
Получить список всех ключей или значениий
keys(collection)
values(collection)
Возвращается итератор. Для материализации значений можно использовать функцию collect()
d3 = [i => f(i) for i = 1:5]
keys(d3)|>collect
Объединить словари
При совпадении ключей, последняя коллекция побеждает:
a = Dict("foo" => 0.0, "bar" => 42.0)
b = Dict(utf8("baz") => 17, utf8("bar") => 4711)
merge(b, a)
Dict{UTF8String,Float64} with 3 entries:
"bar" => 42.0
"baz" => 17.0
"foo" => 0.0
merge(a, b)
Dict{UTF8String,Float64} with 3 entries:
"bar" => 4711.0
"baz" => 17.0
"foo" => 0.0
Заранее выделить память
Полезно для повышения производительности
sizehint!(словарь, кол-во элементов)
Определить тип ключей/значений
valtype(collection)
keytype(collection)