Singkatan untuk-loop untuk beralih melalui array dengan nilai dan indeks

9

Apakah ada cara mudah / singkat untuk beralih melalui loop for pada array, mendapatkan nilai dan indeks?

Opsi dasar:

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
Ian
sumber

Jawaban:

13

Sunting: Seperti yang ditunjukkan Matt B, pairssederhana dan aman-indeks (jika menggunakan OffsetArraytuple, kamus, dll.):

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

Salah satu opsi adalah enumerate:

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

tetapi perhatikan bahwa penghitungan tidak selalu memberikan indeks yang valid, karena itu efektif zip(x, countfrom(1))dan akan gagal untuk OffsetArrays.

Lain yang aman indeks, tetapi filesharus variabel:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end
Ian
sumber
6
lebih mudah pairs:!
Matt B.
ini juga berfungsi untuk hal-hal seperti kamus dan nama tupel dan semacamnya.
Matt B.