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@parallel inom ämnet Parallell bearbetning.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow