Szukaj…


Zrozumienie tablic

Podstawowa składnia

W wyrażeniach tablicowych Julii zastosowano następującą składnię:

[expression for element = iterable]

Zauważ, że podobnie jak w for pętli , wszystkie = , in i są akceptowane do zrozumienia.

Jest to w przybliżeniu równoważne utworzeniu pustej tablicy i użyciu pętli for do push! przedmioty do tego.

result = []
for element in iterable
    push!(result, expression)
end

jednak sposób rozumienia tablic jest możliwie wąski, co jest lepsze dla wydajności.

Na przykład, aby uzyskać tablicę kwadratów liczb całkowitych od 1 do 10 , można użyć następującego kodu.

squares = [x^2 for x=1:10]

Jest to czysty, zwięzły zamiennik dłuższej wersji for pętli.

squares = []
for x in 1:10
    push!(squares, x^2)
end

Zrozumienie tablicy warunkowej

W wersjach wcześniejszych niż Julia 0.5 nie ma możliwości użycia warunków wewnątrz wyrażeń tablicowych. Ale to już nie jest prawda. W Julii 0.5 możemy zastosować warunki wewnątrz warunków, takie jak:

julia> [x^2 for x in 0:9 if x > 5] 
4-element Array{Int64,1}:
 36
 49
 64
 81

Źródło powyższego przykładu można znaleźć tutaj .

Jeśli chcielibyśmy skorzystać ze zrozumienia listy zagnieżdżonej:

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)

Wielowymiarowe pojęcia tablicowe

Zagnieżdżone for pętli mogą być używane do iteracji wielu unikalnych iteracji.

result = []
for a = iterable_a
    for b = iterable_b
        push!(result, expression)
    end
end

Podobnie, wiele specyfikacji iteracji może być dostarczonych do zrozumienia tablicy.

[expression for a = iterable_a, b = iterable_b]

Na przykład, do wygenerowania iloczynu kartezjańskiego 1:3 i 1:2 można użyć następujących elementów.

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)

Spłaszczone tablice wielowymiarowe są podobne, z tym wyjątkiem, że tracą kształt. Na przykład,

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)

jest spłaszczonym wariantem powyższego. Różnica składniowa polega na tym, że zamiast przecinka stosuje się dodatkowy for .

Zrozumienie generatora

Wyrażenia generatora mają podobny format jak wyrażenia tablicowe, ale używają nawiasów () zamiast nawiasów kwadratowych [] .

(expression for element = iterable)

Takie wyrażenie zwraca obiekt Generator .

julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)

Argumenty funkcji

Wyjaśnienia generatora mogą być dostarczone jako jedyny argument funkcji, bez potrzeby stosowania dodatkowego zestawu nawiasów.

julia> join(x^2 for x = 1:5)
"1491625"

Jeśli jednak podano więcej niż jeden argument, zrozumienie generatora wymaga własnego zestawu nawiasów.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow