Skrócona pętla for do iteracji przez tablicę z wartością i indeksem

9

Czy istnieje wygodny / krótszy sposób na iterację w pętli for w tablicy, uzyskując zarówno wartość, jak i indeks?

Podstawowe opcje:

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
źródło

Odpowiedzi:

13

Edycja: Jak zauważa Matt B, pairsjest prosty i bezpieczny dla indeksu (jeśli używasz OffsetArraynazwanej krotki, słownika itp.):

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

Jedną z opcji jest enumerate:

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

ale zwróć uwagę, że wyliczenie niekoniecznie zapewnia prawidłowe indeksy, ponieważ jest skuteczne zip(x, countfrom(1))i mogłoby się przydaćOffsetArray s.

Kolejny, który jest indeksowany, ale wymaga fileszmiennej:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end
Ian
źródło
6
jeszcze łatwiej pairs:!
Matt B.
działa również dla takich rzeczy jak słowniki i krotki nazwane i tym podobne.
Matt B.