Suche…


Syntax

  • denn ich in iter; ... Ende
  • während cond; ... Ende
  • brechen
  • fortsetzen
  • @parallel (op) für i in iter; ... Ende
  • @parallel für i in iter; ... Ende
  • @goto label
  • @label label

Bemerkungen

Immer dann , wenn es Code kürzer und leichter lesen macht, sollten Sie mit Funktionen höherer Ordnung, wie map oder filter , anstelle von Schleifen.

Fizz Buzz

Ein häufiger Anwendungsfall für eine for Schleife besteht darin, einen vordefinierten Bereich oder eine vordefinierte Sammlung zu durchlaufen und dieselbe Aufgabe für alle Elemente auszuführen. Zum Beispiel kombinieren wir hier eine for Schleife mit einer bedingten if elseif else Anweisung :

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

Dies ist die klassische Fizz Buzz- Interviewfrage. Die (abgeschnittene) Ausgabe ist:

1
2
Fizz
4
Buzz
Fizz
7
8

Finde den kleinsten Primfaktor

In einigen Situationen möchten Sie möglicherweise von einer Funktion zurückkehren, bevor Sie eine gesamte Schleife abschließen. Die return Anweisung kann dazu verwendet werden.

function primefactor(n)
    for i in 2:n
        if n % i == 0
            return i
        end
    end
    @assert false  # unreachable
end

Verwendungszweck:

julia> primefactor(100)
2

julia> primefactor(97)
97

Schleifen können auch mit der break Anweisung vorzeitig beendet werden, wodurch nur die einschließende Schleife anstelle der gesamten Funktion beendet wird.

Mehrdimensionale Iteration

In Julia kann eine for-Schleife ein Komma ( , ) enthalten, um die Iteration über mehrere Dimensionen anzugeben. Dies funktioniert ähnlich wie das Schachteln einer Schleife in einer anderen, kann jedoch kompakter sein. Mit der Funktion unten werden beispielsweise Elemente des kartesischen Produkts aus zwei iterierbaren Elementen generiert:

function cartesian(xs, ys)
    for x in xs, y in ys
        produce(x, y)
    end
end

Verwendungszweck:

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)

Die Indizierung von Arrays einer beliebigen Dimension sollte jedoch mit eachindex , nicht mit einer mehrdimensionalen Schleife (falls möglich):

s = zero(eltype(A))
for ind in eachindex(A)
    s += A[ind]
end

Reduktion und Parallelschleifen

Julia bietet Makros zur Vereinfachung der Verteilung von Berechnungen auf mehrere Maschinen oder Worker. Im Folgenden wird beispielsweise die Summe einiger Quadrate berechnet, möglicherweise parallel.

function sumofsquares(A)
    @parallel (+) for i in A
        i ^ 2
    end
end

Verwendungszweck:

julia> sumofsquares(1:10)
385

Weitere @parallel zu diesem Thema finden Sie im Beispiel zu @parallel im Thema Parallele Verarbeitung.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow