Cortociclo for-loop per scorrere attraverso un array con valore e indice


9

Esiste un modo conveniente / abbreviato per scorrere un ciclo for su un array, ottenendo sia valore che indice?

Opzioni di base:

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

Risposte:


13

Modifica: come sottolinea Matt B, pairsè semplice e sicuro (se si utilizza un OffsetArraynome, tupla, dizionario, ecc.):

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

Un'opzione è enumerate:

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

ma nota che l'enumerazione non fornisce necessariamente indici validi, poiché è efficace zip(x, countfrom(1))e si spezzerebbe per OffsetArrays.

Un altro che è indice-sicuro, ma richiede filesdi essere una variabile:

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

6
ancora più semplice pairs:!
Matt B.

funziona anche per cose come dizionari e tuple nominate e simili.
Matt B.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.