Funktion wie Aufzählung, um Index und Wert für Offset-Arrays zu erhalten?

8

Wenn ich ein Array wie dieses habe:

using OffsetArrays

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

Ich kann das Array durchlaufen mit:

for (i,x) in enumerate(a)
    println((i,x))
end

und bekomme:

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

Aber ich will das:

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)

Gibt es eine Möglichkeit, den tatsächlichen Index abzurufen, da ich ein Offset-Array verwende?

Alec
quelle

Antworten:

9

Die Funktion pairsberücksichtigt das Indizierungsverhalten:

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)

aus den Dokumenten:

Base.pairs- Funktion .

pairs(collection)

Gibt einen Iterator über key => valuePaare für jede Sammlung zurück, die einen Satz von Schlüsseln einem Satz von Werten zuordnet. Dies schließt Arrays ein, wobei die Schlüssel die Array-Indizes sind.

pairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)

Ein Iterator, der auf jedes Element des Arrays zugreift Aund zurückgibt i => x, wobei ider Index für das Element und ist x = A[i]. Identisch mit pairs(A), außer dass der Indexstil ausgewählt werden kann. Ebenfalls ähnlich wie enumerate(A), außer idass ein gültiger Index für ist A, während enumerateimmer unabhängig von den Indizes von 1 gezählt wird A.

Durch Angabe wird IndexLinear()sichergestellt, dass ies sich um eine Ganzzahl handelt. Durch die Angabe wird IndexCartesian()sichergestellt, idass a CartesianIndex; Durch Angabe wird ausgewählt, IndexStyle(A)welcher als nativer Indizierungsstil für das Array definiert wurde A.

Eine Mutation der Grenzen des zugrunde liegenden Arrays macht diesen Iterator ungültig.

longemen3000
quelle