Скорочена програма для циклу, щоб повторити масив із значенням та індексом


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

Редагування: Як вказує Метт Б, 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))і би порушується для OffsetArrays.

Ще одне, що безпечно для індексів, але воно filesповинно бути змінною:

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

6
ще простіше pairs:!
Метт Б.

він також працює для таких речей, як словники та названі кортежі тощо.
Метт Б.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.