Abreviado for-loop para iterar a través de una matriz con valor e índice

9

¿Hay una manera conveniente / abreviada de iterar a través de un bucle for en una matriz, obteniendo tanto valor como índice?

Opciones basicas:

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
fuente

Respuestas:

13

Editar: como señala Matt B, pairses simple y seguro para el índice (si se usa una OffsetArraytupla con nombre, diccionario, etc.):

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

Una opción es enumerate:

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

pero tenga en cuenta que enumerar no necesariamente proporciona índices válidos, ya que es efectivo zip(x, countfrom(1))y se rompería por OffsetArrays.

Otro que es seguro para el índice, pero requiere filesser una variable:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end
Ian
fuente
66
aún más fácil pairs:!
Matt B.
También funciona para cosas como diccionarios y tuplas con nombre y demás.
Matt B.