NamedTuple
#
Core.NamedTuple — Type
NamedTuple
NamedTuple, как следует из названия, — это именованный кортеж (Tuple). То есть это подобная кортежу коллекция значений, каждый элемент которой имеет уникальное имя, представленное Symbol. Как и тип Tuple, тип NamedTuple является неизменяемым: ни имена, ни значения нельзя изменить напрямую после создания.
Именованный кортеж можно создать как литерал кортежа с ключами, например (a=1, b=2), как литерал кортежа с точкой с запятой после открывающей скобки, например (; a=1, b=2) (эта форма также принимает программно сгенерированные имена, как описано ниже), или с использованием типа NamedTuple в качестве конструктора, например NamedTuple{(:a, :b)}1,2.
Получить доступ к значению, связанному с именем, в именованном кортеже можно с помощью синтаксиса доступа к полям, например x.a, или с помощью функции getindex, например x[:a] или x[(:a, :b)]. Кортеж имен можно получить с помощью функции keys, а кортеж значений — с помощью функции values.
|
При итерации по |
ниже.) Для итерации по парам «имя-значение» используйте функцию pairs.
Объявлять типы NamedTuple удобно с помощью макроса @NamedTuple.
Примеры
julia> x = (a=1, b=2)
(a = 1, b = 2)
julia> x.a
1
julia> x[:a]
1
julia> x[(:a,)]
(a = 1,)
julia> keys(x)
(:a, :b)
julia> values(x)
(1, 2)
julia> collect(x)
2-element Vector{Int64}:
1
2
julia> collect(pairs(x))
2-element Vector{Pair{Symbol, Int64}}:
:a => 1
:b => 2
Так же как и в случае с программным определением именованных аргументов, именованный кортеж можно создать путем указания пар name::Symbol => value после точки с запятой внутри литерала кортежа. Этот вариант и синтаксис name=value можно сочетать:
julia> (; :a => 1, :b => 2, c=3)
(a = 1, b = 2, c = 3)
Пары «имя-значение» также можно предоставить путем распаковки именованного кортежа или любого итератора, выдающего коллекции из двух значений, первым из которых является символ:
julia> keys = (:a, :b, :c); values = (1, 2, 3);
julia> NamedTuple{keys}(values)
(a = 1, b = 2, c = 3)
julia> (; (keys .=> values)...)
(a = 1, b = 2, c = 3)
julia> nt1 = (a=1, b=2);
julia> nt2 = (c=3, d=4);
julia> (; nt1..., nt2..., b=20) # последнее b перезаписывает значение из nt1
(a = 1, b = 20, c = 3, d = 4)
julia> (; zip(keys, values)...) # zip выдает кортежи типа (:a, 1)
(a = 1, b = 2, c = 3)
Как и в случае с именованными аргументами, идентификаторы и точечные выражения предполагают использование имен:
julia> x = 0
0
julia> t = (; x)
(x = 0,)
julia> (; t.x)
(x = 0,)
|
Совместимость: Julia 1.5
Начиная с версии Julia 1.5 для идентификаторов и точечных выражений доступны неявные имена. |
|
Совместимость: Julia 1.7
Начиная с версии Julia 1.7 методы |