オフセット配列のインデックスと値を取得する列挙のような関数ですか?


8

このような配列がある場合:

using OffsetArrays

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

私は配列を反復することができます:

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

そして得る:

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

しかし、私はこれが欲しい:

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

オフセット配列を使用しているため、実際のインデックスを取得する方法はありますか?

回答:


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)

ドキュメントから:

Base.pairs機能

pairs(collection)

key => valueキーのセットを値のセットにマップするコレクションのペアのイテレータを返します。これには、キーが配列インデックスである配列が含まれます。

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

配列の各要素にアクセスしてA返すイテレータi => x。ここiで、は要素のインデックスであり、x = A[i]です。pairs(A)インデックスのスタイルを選択できることを除いて、と同じです。また、に似てenumerate(A)いる場合を除き、iために有効な指標となりますAが、enumerate常にかかわらずの指標の1からカウントしますA

これを指定IndexLinear()するiと、整数になります。指定IndexCartesian()すると、それiがになりCartesianIndexます。指定するとIndexStyle(A)、配列のネイティブインデックススタイルとして定義されている方が選択されAます。

基本となる配列の境界の変異は、この反復子を無効にします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.