命名元组
#
Core.NamedTuple
— Type
NamedTuple
NamedTuple
s 顾名思义,就是命名为Tuple
s 的元组。也就是说,它们是一个类似于元组的值集合,其中每个条目都有一个唯一的名称,用`Symbol` 表示。与Tuple
s 一样,NamedTuple
s 也是不可变的;名称和值都不能在构建后就地修改。
命名元组可作为带键的元组字面形式创建,如`(a=1, b=2)` ,或作为开头括号后带分号的元组字面形式创建,如`(; a=1, b=2)` (这种形式也接受编程生成的名称,如下所述),或使用`NamedTuple` 类型作为构造函数创建,如. NamedTuple{(:a, :b)}1,2
.
访问命名元组中与名称相关联的值可以使用字段访问语法,如`x.a` ,或使用`getindex` ,如`x:a]` 或`x[(:a, :b)]` 。可以使用[keys
,获得名称的元组,可以使用`values` ,获得值的元组。
对 |
@NamedTuple
宏可用于方便地声明`NamedTuple` 类型。
Examples
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) # the final b overwrites the value from nt1
(a = 1, b = 20, c = 3, d = 4)
julia> (; zip(keys, values)...) # zip yields tuples such as (: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 起,可使用`getindex` 方法与多个 |