Short-for-loop para iterar através de uma matriz com valor e índice

9

Existe uma maneira conveniente / abreviada de percorrer um loop for em uma matriz, obtendo valor e índice?

Opções básicas:

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
fonte

Respostas:

13

Editar: Como aponta Matt B, pairsé simples e seguro para índices (se estiver usando uma OffsetArraytupla nomeada, dicionário etc.):

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

Uma opção é enumerate:

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

mas observe que enumerar não fornece necessariamente índices válidos, pois é eficaz zip(x, countfrom(1))e seria interrompido por OffsetArrays.

Outro que é seguro para índices, mas precisa filesser uma variável:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end
Ian
fonte
6
ainda mais fácil pairs:!
Matt B.
também funciona para coisas como dicionários e tuplas nomeadas e coisas do tipo.
Matt B.