像枚举这样的函数来获取偏移数组的索引和值?

Ale*_*lec 8 arrays indexing julia

如果我有这样的数组:

using OffsetArrays

a = OffsetArray(collect(1:5),(11:15))
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式遍历数组:

for (i,x) in enumerate(a)
    println((i,x))
end
Run Code Online (Sandbox Code Playgroud)

并得到:

(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 5)
Run Code Online (Sandbox Code Playgroud)

但我想要这个:

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得真正的索引,因为我使用的是偏移数组?

lon*_*000 9

该函数pairs尊重索引行为:

julia> using OffsetArrays

julia> a = OffsetArray(collect(1:5),(11:15))

julia> for (i,x) in pairs(a)
         println((i,x))
       end

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)
Run Code Online (Sandbox Code Playgroud)

从文档:

Base.pairs功能

pairs(collection)

key => value为将一组键映射到一组值的任何集合返回对的迭代器。这包括数组,其中键是数组索引。

pairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)
Run Code Online (Sandbox Code Playgroud)

访问数组中每个元素的迭代器A,返回i => x, 其中i是元素的索引 和x = A[i]。与 相同pairs(A),只是可以选择索引的样式。也类似于enumerate(A), excepti将是 的有效索引A,而enumerate无论 的索引如何,始终从 1 开始计数A

指定IndexLinear()确保i将是一个整数;指定IndexCartesian()确保i将是一个CartesianIndex; 指定IndexStyle(A)选择已定义为 array 的本机索引样式的任何一个A

底层数组边界的变异将使这个迭代器失效。