Julia Language
för Loops
Sök…
Syntax
- för jag i iter; ...; slutet
- medan kond; ...; slutet
- ha sönder
- Fortsätta
- @parallel (op) för i i iter; ...; slutet
- @ parallell för jag i iter; ...; slutet
- @goto etikett
- @ etikett
Anmärkningar
När den gör koden kortare och lättare att läsa, kan du överväga att använda högre ordningsfunktioner, till exempel map
eller filter
, istället för slingor.
Fizz Buzz
Ett vanlig fall för en for
loop är att iterera över ett fördefinierat intervall eller samling och utföra samma uppgift för alla dess element. Här kombinerar vi till exempel en for
loop med ett villkorligt if
elseif
else
uttalande :
for i in 1:100
if i % 15 == 0
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
Detta är den klassiska Fizz Buzz- intervjufrågan. (Trunkerad) utgång är:
1
2
Fizz
4
Buzz
Fizz
7
8
Hitta minsta primära faktor
I vissa situationer kanske man vill återvända från en funktion innan man slutför en hel slinga. return
kan användas för detta.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Användande:
julia> primefactor(100)
2
julia> primefactor(97)
97
Loops kan också avslutas tidigt med break
uttalandet, som avslutar bara den medföljande slingan istället för hela funktionen.
Multidimensionell iteration
I Julia kan en for loop innehålla ett komma ( ,
) för att ange iterering över flera dimensioner. Detta fungerar på samma sätt som att häcka en slinga i en annan, men kan vara mer kompakt. Exempelvis genererar funktionen nedan delar av den kartesiska produkten av två iterables:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Användande:
julia> collect(@task cartesian(1:2, 1:4))
8-element Array{Tuple{Int64,Int64},1}:
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
Indexering över matriser av någon dimension bör dock göras med eachindex
, inte med en flerdimensionell slinga (om möjligt):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Reduktion och parallella slingor
Julia tillhandahåller makron för att förenkla distributionen av beräkningar över flera maskiner eller arbetare. Till exempel beräknar följande summan av ett antal kvadrater, eventuellt parallellt.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Användande:
julia> sumofsquares(1:10)
385
För mer om detta ämne, se exemplet på @parallel
inom ämnet Parallell bearbetning.