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"


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