Engee 文档

命名元组

NamedTuple

NamedTuples 顾名思义,就是命名为Tuples 的元组。也就是说,它们是一个类似于元组的值集合,其中每个条目都有一个唯一的名称,用`Symbol` 表示。与Tuples 一样,NamedTuples 也是不可变的;名称和值都不能在构建后就地修改。

命名元组可作为带键的元组字面形式创建,如`(a=1, b=2)` ,或作为开头括号后带分号的元组字面形式创建,如`(; a=1, b=2)` (这种形式也接受编程生成的名称,如下所述),或使用`NamedTuple` 类型作为构造函数创建,如. NamedTuple{(:a, :b)}1,2.

访问命名元组中与名称相关联的值可以使用字段访问语法,如`x.a` ,或使用`getindex` ,如`x:a]` 或`x[(:a, :b)]` 。可以使用[keys ,获得名称的元组,可以使用`values` ,获得值的元组。

NamedTuples 进行迭代,可得到不含名称的_值_(见下文示例)。(要迭代名称-值对,请使用`pairs` 函数。

@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` 方法与多个符号s。