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?

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.