Boucle raccourcie pour parcourir un tableau avec à la fois une valeur et un index

9

Existe-t-il un moyen pratique / abrégé d'itérer dans une boucle for sur un tableau, en obtenant à la fois la valeur et l'index?

Options de base:

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
la source

Réponses:

13

Edit: Comme le souligne Matt B, pairsest simple et sûr pour l'index (si vous utilisez un OffsetArraytuple nommé, un dictionnaire, etc.):

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

Une option est enumerate:

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

mais notez que énumérer ne fournit pas nécessairement des indices valides, car il est efficace zip(x, countfrom(1))et romprait pour OffsetArrays.

Un autre index-safe, mais qui doit filesêtre une variable:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end
Ian
la source
6
encore plus facile pairs:!
Matt B.
il fonctionne également pour des choses comme les dictionnaires et les tuples nommés et autres.
Matt B.