Diccionarios y conjuntos en Julia
En los capítulos anteriores aprendimosArreglos en Juliaytuplas en Julia。
Un arreglo es un tipo de colección; además, Julia tiene otros tipos de colecciones, como diccionarios y sets (colecciones no ordenadas).
Diccionario
Un diccionario es un modelo de contenedor mutable que puede almacenar objetos de cualquier tipo.
Cada par clave-valor del diccionariokey=>valuese separa con dos puntos=>, entre cada par clave-valor se usa una coma,; todo el diccionario se incluye entre llaves{}con el siguiente formato:
Crear un diccionario
La sintaxis para crear un diccionario es la siguiente:Dict("key1" => value1, "key2" => value2,,…, "keyn" => valuen)
El siguiente ejemplo crea un diccionario simple: la clave A corresponde al valor 1, y la clave B corresponde al valor 2:
Dict("A"=>1, "B"=>2)
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia>
Usar for para crear un diccionario:
Ejemplo
Dict{String, Float64} with 73 entries:
"285" => -0.965926
"310" => -0.766044
"245" => -0.906308
"320" => -0.642788
"350" => -0.173648
"20" => 0.34202
"65" => 0.906308
"325" => -0.573576
"155" => 0.422618
"80" => 0.984808
"335" => -0.422618
"125" => 0.819152
"360" => 0.0
"75" => 0.965926
"110" => 0.939693
"185" => -0.0871557
"70" => 0.939693
"50" => 0.766044
"190" => -0.173648
⋮ => ⋮
Clave (Key)
Las claves en un diccionario son únicas. Si asignamos un valor a una clave existente, no creamos una nueva, sino que modificamos la clave existente.
Buscar una clave (key)
Podemos usar la función haskey() para comprobar si el diccionario contiene la clave (key) especificada:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> haskey(first_dict, "A")
false
julia> haskey(D, "A")
true
julia> haskey(D, "Z")
false
También se puede usarin()la función para comprobar si el diccionario contieneclave/valorpar:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> in(("A" => 1), D)
true
julia> in(("X" => 220), first_dict)
false
Agregar un par key/value
Podemos agregar un nuevo par key/value a un diccionario existente, de la siguiente manera:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> D["C"] = 3
3
julia> D
Dict{String, Int64} with 3 entries:
"B" => 2
"A" => 1
"C" => 3
Eliminar un par key/value
Podemos usardelete!()la función para eliminar la clave (key) de un diccionario existente:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
Obtener todas las claves (keys) del diccionario
Podemos usarkeys()la función para obtener todas las claves (keys) del diccionario:
Ejemplo
KeySet for a Dict{String, Int64} with 2 entries. Keys:
"B"
"A"
julia>
Valor (Value)
Cada clave en un diccionario tiene un valor correspondiente.
Ver todos los valores del diccionario
Podemos usarvalues()para ver todos los valores del diccionario:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> values(D)
ValueIterator for a Dict{String, Int64} with 2 entries. Values:
2
1
julia>
El diccionario como objeto iterable
Podemos tratar el diccionario como un objeto iterable para ver los pares clave/valor:
Ejemplo
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> for kv in D
println(kv)
end
"B" => 2
"A" => 1
En el ejemplo,kves una tupla que contiene cada par clave/valor.
Ordenación de diccionarios
Los diccionarios son desordenados, pero podemos usar la función sort() para ordenarlos:
Ejemplo
Dict{String, Int64} with 6 entries:
"S" => 220
"U" => 400
"T" => 350
"W" => 670
"V" => 575
"R" => 100
julia> for key in sort(collect(keys(ejemplo_dict)))
println("$key => $(ejemplo_dict[key])")
end
R => 100
S => 220
T => 350
U => 400
V => 575
W => 670
Podemos usar el tipo de datos SortedDict del paquete DataStructures.ji para mantener el diccionario siempre ordenado.
Para usar el paquete DataStructures primero hay que instalarlo; se puede agregar SortedDict con el comando add en el modo Pkg del REPL.
En el REPL, ingrese el símbolo], para entrar alpkgmodo.
Entrar al modo pkg
Formato de sintaxis para agregar un paquete:
add 包名
A continuación, después de agregar el paquete DataStructures, los ejemplos posteriores podrán ejecutarse correctamente:
(@v1.7) pkg> add DataStructuresPara paquetes no registrados, se puede especificar directamente la URL:
add https://github.com/fredrikekre/ImportMacros.jl
Paquete local:
add 本地路径/包名.jl
Ejemplo
julia> ejemplo_dict = DataStructures.SortedDict("S" => 220, "T" => 350, "U" => 400, "V" => 575, "W" => 670)
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 5 entries:
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
julia> ejemplo_dict["R"] = 100
100
julia> ejemplo_dict
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 6 entries:
"R" => 100
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
Set (conjunto)
El Set (conjunto) de Julia es un conjunto de datos de objetos sin repetición; todos los elementos son únicos.Las diferencias entre un set y otros tipos de colecciones son:
- Los elementos de un set son únicos.
- El orden de los elementos en un set no es importante.
Un set se usa para crear listas sin duplicados.
Crear un conjunto Set
Con el constructor Set, podemos crear conjuntos como los siguientes:
Ejemplo
Set{Any}()
julia> num_primes = Set{Int64}()
Set{Int64}()
julia> var_site = Set{String}(["Google","Ejemplo","Taobao"])
Set{String} with 3 elements:
"Google"
"Taobao"
"Ejemplo"
Podemos usarpush!()la función para agregar elementos al conjunto, de la siguiente manera:
Ejemplo
Set{String} with 4 elements:
"Google"
"Wiki"
"Taobao"
"Ejemplo"
Podemos usarin()la función para comprobar si un elemento existe en el conjunto:
Ejemplo
true
julia> in("Zhihu", var_site)
false
Operaciones comunes
La unión, intersección y diferencia son operaciones comunes que podemos realizar sobre conjuntos; las funciones correspondientes sonunion()、intersect()ysetdiff()。

Unión
Dados dos conjuntos A y B, el conjunto formado por todos sus elementos combinados se llama unión de A y B.Ejemplo
Set{String} with 4 elements:
"blue"
"green"
"black"
"red"
julia> B = Set(["red","orange","yellow","green","blue","indigo","violet"])
Set{String} with 7 elements:
"indigo"
"yellow"
"orange"
"blue"
"violet"
"green"
"red"
julia> union(A, B)
Set{String} with 8 elements:
"indigo"
"green"
"black"
"yellow"
"orange"
"blue"
"violet"
"red"
Intersección
La intersección de A y B es el conjunto que contiene todos los elementos que pertenecen tanto a A como a B, y ningún otro elemento.
Ejemplo
Set{String} with 3 elements:
"blue"
"green"
"red"
Diferencia
La diferencia de A y B es el conjunto que contiene todos los elementos que pertenecen a A pero no a B, es decir, elimina los elementos que se superponen entre B y A.
Ejemplo
Set{String} with 1 element:
"black"
Ejemplos de funciones comunes para diccionarios y conjuntos
En los siguientes ejemplos se muestran funciones de uso común en diccionarios, que también se aplican a los conjuntos:
Crear dos diccionarios dict1 y dict2:
Ejemplo
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> dict2 = Dict(220 => "Y", 300 => "Z", 450 => "W")
Dict{Int64,String} with 3 entries:
450 => "W"
220 => "Y"
300 => "Z"
Unión de diccionarios:
Ejemplo
4-element Array{Pair{Int64,String},1}:
100 => "X"
220 => "Y"
450 => "W"
300 => "Z"
Intersect
julia> intersect(dict1, dict2)
1-element Array{Pair{Int64,String},1}:
220 => "Y"
Diferencia de diccionarios:
Ejemplo
1-element Array{Pair{Int64,String},1}:
100 => "X"
Combinar diccionarios:
Ejemplo
Dict{Int64,String} with 4 entries:
100 => "X"
450 => "W"
220 => "Y"
300 => "Z"
Ver el valor mínimo en el diccionario:
Ejemplo
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> findmin(dict1)
("X", 100)