在 Julia 中,为什么在两个元素的元组上使用 Pair?

Ale*_*lec 4 types tuples julia

我什么时候应该在两个元素的元组上使用 Pair ,反之亦然?

And*_*kin 5

主要是当您想在视觉上突出显示第一个和第二个元素之间存在关系时。例如,考虑以下Dict构造

Dict(:a => 1, :b => 2)
Run Code Online (Sandbox Code Playgroud)

尽管您可以使用Tuple,但在这里更明显的是,键 ( :aand :b) 和值 (1, 2)之间存在关系。

实际上,这不仅仅是显而易见的,它还为您提供了使用以下定义的可能性

julia> Dict(((:a, 1) => (:b, 2)))
Dict{Tuple{Symbol, Int64}, Tuple{Symbol, Int64}} with 1 entry:
  (:a, 1) => (:b, 2)
Run Code Online (Sandbox Code Playgroud)

比较一下

julia> Dict(((:a, 1), (:b, 2)))
Dict{Symbol, Int64} with 2 entries:
  :a => 1
  :b => 2
Run Code Online (Sandbox Code Playgroud)

仅使用元组很难构建一个可以将元组作为键的字典。

另一个稍微不同的例子可以在DataFrames.jl 的join函数中找到

innerjoin(a, b, on = [:City => :Location, :Job => :Work])
Run Code Online (Sandbox Code Playgroud)

这里很容易理解,您将CityaLocation列绑定b。虽然元组语法很好,但是Pair符号看起来更具可读性。

另一方面,如果您正在构建二维点,则无需使用Pair,通常的 Tuple 就足够了。Point(x => y)Point(x, y).

因此,根据经验,如果第一个和第二个元素 use 之间存在关系Pair,如果它们彼此独立,则使用Tuple