Julia - 元组

与数组类似,元组也是元素的有序集合。 元组的工作方式与数组几乎相同,但它们之间存在以下重要区别 −

  • 数组由方括号表示,而元组由括号和逗号表示。

  • 元组是不可变的。

创建元组

我们可以将元组创建为数组,并且数组的大多数函数也可以用于元组。 下面给出了一些示例 −

julia> tupl=(5,10,15,20,25,30)
(5, 10, 15, 20, 25, 30)

julia> tupl
(5, 10, 15, 20, 25, 30)

julia> tupl[3:end]
(15, 20, 25, 30)

julia> tupl = ((1,2),(3,4))

((1, 2), (3, 4))

julia> tupl[1]
(1, 2)

julia> tupl[1][2]
2

We cannot change a tuple:
julia> tupl[2]=0
ERROR: MethodError: no method matching setindex!(::Tuple{Tuple{Int64,Int64},Tuple{Int64,Int64}}, ::Int64, ::Int64)
Stacktrace:
 [1] top-level scope at REPL[7]:1

命名元组

命名元组只是元组和字典的组合,因为 −

  • 命名元组像元组一样是有序且不可变的

  • 就像命名元组中的字典一样,每个元素都有一个可用于访问它的唯一键。

在下一节中,让我们看看如何创建命名元组 −

创建命名元组

您可以通过以下方式在 Julia 中创建命名元组 −

  • 在单独的元组中提供键和值

  • 在单个元组中提供键和值

  • 组合两个现有的命名元组

单独元组中的键和值

创建命名元组的一种方法是在单独的元组中提供键和值。

示例

julia> names_shape = (:corner1, :corner2)
(:corner1, :corner2)

julia> values_shape = ((100, 100), (200, 200))
((100, 100), (200, 200))

julia> shape_item2 = NamedTuple{names_shape}(values_shape)
(corner1 = (100, 100), corner2 = (200, 200))

我们可以使用点(.)语法来访问元素 −

julia> shape_item2.corner1
(100, 100)

julia> shape_item2.corner2
(200, 200)

单个元组中的键和值

我们还可以通过在单个元组中提供键和值来创建命名元组。

示例

julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

我们可以使用点(.)语法来访问元素 −

julia> shape_item.corner1
(1, 1)

julia> shape_item.corner2
(-1, -1)

julia> shape_item.center
(0, 0)

julia> (shape_item.center,shape_item.corner2)
((0, 0), (-1, -1))

我们还可以像普通元组一样访问所有值,如下所示 −

julia> c1, c2, center = shape_item
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

julia> c1
(1, 1)

组合两个命名元组

Julia 为我们提供了一种通过将两个命名元组组合在一起来创建新命名元组的方法,如下所示 −

示例

julia> colors_shape = (top = "red", bottom = "green")
(top = "red", bottom = "green")

julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

julia> merge(shape_item, colors_shape)
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0), top = "red", bottom = "green")

命名元组作为关键字参数

如果您想将一组关键字参数传递给函数,在 Julia 中命名元组是一种便捷的方法。 以下是接受三个关键字参数的函数示例 −

julia> function ABC(x, y, z; a=10, b=20, c=30)
         println("x = $x, y = $y, z = $z; a = $a, b = $b, c = $c")
      end
ABC (generic function with 1 method)

还可以定义一个命名元组,其中包含一个或多个关键字的名称和值,如下所示 −

julia> options = (b = 200, c = 300)
(b = 200, c = 300)

为了将命名元组传递给我们需要使用的函数; 调用函数时 −

julia> ABC(1, 2, 3; options...)
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300

值和关键字也可以被后面的函数覆盖,如下所示 −

julia> ABC(1, 2, 3; b = 1000_000, options...)
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300

julia> ABC(1, 2, 3; options..., b= 1000_000)
x = 1, y = 2, z = 3; a = 10, b = 1000000, c = 300