値とインデックスの両方を含む配列を反復処理する省略形のforループ


9

値とインデックスの両方を取得して、配列のforループを反復処理する便利な方法はありますか?

基本オプション:

i = 1
for file in ["foo.csv", "bar.csv"]
    ...
   i += 1
end
files = ["foo.csv", "bar.csv"]
for i in 1:length(files)
   files[i]
end

回答:


13

編集:Matt Bが指摘するように、pairsシンプルでインデックスセーフです(OffsetArray、名前付きタプル、辞書などを使用している場合)。

for (i, file) in pairs(["foo.csv", "bar.csv"])
    ...
end

1つのオプションはenumerate次のとおりです。

for (i, file) in enumerate(["foo.csv", "bar.csv"])
    ...
end

ただし、enumerateは事実上有効でzip(x, countfrom(1))あり、OffsetArraysで機能しないため、必ずしも有効なインデックスを提供するとは限らないことに注意してください。

もう1つはインデックスセーフですがfiles、変数である必要があります。

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end

6
さらに簡単:pairs
マットB.

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