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

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

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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.