Словарь (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)

results matching ""

    No results matching ""