Julia Language
uppfattningar
Sök…
Arrayförståelse
Grundläggande syntax
Julias matrisförståelse använder följande syntax:
[expression for element = iterable]
Observera att som for
öglor accepteras alla =
, in
och ∈
för förståelsen.
Detta motsvarar ungefär att skapa en tom matris och använda en for
loop för att push!
artiklar till den.
result = []
for element in iterable
push!(result, expression)
end
emellertid är typen av en matrisförståelse så smal som möjligt, vilket är bättre för prestanda.
Till exempel för att få en matris med heltalens kvadrater från 1
till 10
kan följande kod användas.
squares = [x^2 for x=1:10]
Detta är en ren, kort ersättning för den längre versionen for
-loop.
squares = []
for x in 1:10
push!(squares, x^2)
end
Villkorlig arrayförståelse
Innan Julia 0.5 finns det inget sätt att använda förhållanden inom matrisförståelserna. Men det är inte längre sant. I Julia 0.5 kan vi använda villkoren inuti villkor som följande:
julia> [x^2 for x in 0:9 if x > 5]
4-element Array{Int64,1}:
36
49
64
81
Källan till exemplet ovan kan hittas här .
Om vi vill använda kapslade listförståelser:
julia>[(x,y) for x=1:5 , y=3:6 if y>4 && x>3 ]
4-element Array{Tuple{Int64,Int64},1}:
(4,5)
(5,5)
(4,6)
(5,6)
Flerdimensionella matrisförståelser
Kapslade for
slingor kan användas för att iterera över ett antal unika iterables.
result = []
for a = iterable_a
for b = iterable_b
push!(result, expression)
end
end
På liknande sätt kan flera iterationsspecifikationer levereras till en matrisförståelse.
[expression for a = iterable_a, b = iterable_b]
Till exempel kan följande användas för att generera den kartesiska produkten av 1:3
och 1:2
.
julia> [(x, y) for x = 1:3, y = 1:2]
3×2 Array{Tuple{Int64,Int64},2}:
(1,1) (1,2)
(2,1) (2,2)
(3,1) (3,2)
Utplattade flerdimensionella matrisförståelser är liknande, förutom att de förlorar formen. Till exempel,
julia> [(x, y) for x = 1:3 for y = 1:2]
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
är en utplattad variant av ovanstående. Den syntaktiska skillnaden är att ett extra for
används istället för ett komma.
Generatorförståelser
Generatorförståelser följer ett liknande format som arrayförståelser, men använd parenteser ()
istället för fyrkantiga parenteser []
.
(expression for element = iterable)
Ett sådant uttryck returnerar ett Generator
objekt.
julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)
Funktionsargument
Generatorförståelser kan tillhandahållas som det enda argumentet för en funktion utan behov av en extra uppsättning parenteser.
julia> join(x^2 for x = 1:5)
"1491625"
Om mer än ett argument tillhandahålls kräver emellertid generatorförståelsen sin egen uppsättning parenteser.
julia> join(x^2 for x = 1:5, ", ")
ERROR: syntax: invalid iteration specification
julia> join((x^2 for x = 1:5), ", ")
"1, 4, 9, 16, 25"