Сокращенный цикл for для перебора массива со значением и индексом - PullRequest
9 голосов
/ 03 октября 2019

Существует ли удобный / сокращенный способ перебора цикла 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

1 Ответ

13 голосов
/ 03 октября 2019

Редактировать: Как указывает Мэтт B, pairs прост и безопасен для индекса (при использовании OffsetArray, именованного кортежа, словаря и т. Д.):

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

Один из вариантов: enumerate:

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

, но обратите внимание, что перечисление не обязательно обеспечивает действительные индексы, поскольку эффективно zip(x, countfrom(1))и прервется на OffsetArray с.

Еще один, безопасный для индекса, но требующий files в качестве переменной:

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