A Julia egyik központi célja, hogy gyorsan és hatékonyan tudjunk számításokat végezni numerikus adatokon. Renegeteg numerikus adaton.
Az adatok általában tömbökben (vagy valamilyen kapcsolódó típusban) tárolódnak, így nyugodtan mondhatjuk, hogy a tömbök a Julia nyelv középpontjában állnak.
A tömbök tetszőleges méretűek lehetnek (amit csak a hardver memóriakorlátai szabnak meg), és tetszőleges számú dimenziójuk lehet.
Ez a bevezető fogalom az egydimenziós tömbök alapjaival foglalkozik, amelyeket vektoroknak nevezünk.
A Juliában a vektor értékek rendezett sorozata, amelyeket indexszám alapján érhetünk el.
A vektor létrehozásának legegyszerűbb módja, ha a szögletes zárójelbe felsoroljuk az értékeket:
julia> num_vec = [1, 4, 9]
3-element Vector{Int64}:
1
4
9
julia> str_vec = ["arrays", "are", "important"]
3-element Vector{String}:
"arrays"
"are"
"important"
A vektor típusa megegyezik az egyes elemek típusával.
Tehát a vektoroknak homogéneknek kell lenniük (minden elem azonos típusú)?
Bizonyos szinten igen, és ha a legjobb teljesítményt szeretnéd elérni, érdemes erre törekedni.
Ha azonban szükséges, a Julia megkerülheti ezt a korlátot az Any típus használatával:
julia> mixed_vector = [1, "str", 'c']
3-element Vector{Any}:
1
"str"
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
Üres vektor létrehozásakor a Julia alapértelmezés szerint az Any elemtípust használja, de ez pontosabban is megadható, ha az üres tömböt a kívánt elemtípussal annotáljuk.
julia> empty_vec = []
Any[]
julia> empty_int_vec = Int64[]
Int64[]
Olvasd el és jegyezd meg ezt a szabályt:
Ez ismerős mindenkinek, aki használt már más adatelemző nyelveket (R, Matlab, Fortran...), de sokkoló lehet azoknak az informatikusoknak, akik C-szerű nyelvekhez szoktak.
Egyébként az indexek úgy működnek, ahogy gondolnád: csak tedd őket szögletes zárójelbe:
squares = [0, 1, 4, 9, 16]
squares[1] # 0
squares[3] # 4
squares[begin] # 0 ("begin" is synonym for 1)
squares[end] # 16 ("end" is synonym for length(squares))
Figyeld meg, milyen kényelmes az indexelés end-del (ami nagyon hasznos) és begin-nel (ami valószínűleg nem az).
A Python-programozók talán a negatív indexeken gondolkodnak.
Ne tedd: ezek nem részei a Juliának, és BoundsError hibát váltanak ki, akárcsak bármely 1-nél kisebb vagy length(squares)-nél nagyobb index.
A vektorok a Juliában módosíthatók: az egyes cellák tartalmát megváltoztathatjuk.
julia> vals = [1, 3, 5, 7]
4-element Vector{Int64}:
1
3
5
7
julia> vals[2] = 4 # reassign the value of this element
4
# Only the value at position 2 changes:
julia> vals
4-element Vector{Int64}:
1
4
5
7
Sok függvény áll rendelkezésre a vektorok manipulálására, bár a Julia dokumentációja ezeket vektorok helyett inkább „kollekciókként” általánosítja.
Figyeld meg, hogy a konvenció szerint azoknak a függvényeknek a nevében, amelyek módosítják a bemenetüket, ! szerepel.
A fordító ezt nem kényszeríti ki, de a Julia világában ez egy nagyon erős konvenció.
Íme néhány a hasznos függvények közül:
push!() függvényt.pop!() függvényt használd.pushfirst!() és a popfirst!().insert!() és a deleteat!() áll rendelkezésre.julia> vals = [1, 3]
2-element Vector{Int64}:
1
3
julia> push!(vals, 5, 6) # can add multiple values
4-element Vector{Int64}:
1
3
5
6
julia> pop!(vals) # mutates vals, return popped value
6
julia> vals
3-element Vector{Int64}:
1
3
5
Elyse, a leendő varázsló, éppen az alapokat gyakorolja. Van egy pakli kártyája, amit szeretne manipulálni.
Hogy kicsit könnyebb legyen a dolga, csak az 1-től 10-ig terjedő kártyákat használja, így a kártyapaklija egy számvektorral ábrázolható. Egy adott kártya pozíciója a vektor indexének felel meg.
Egy kártya kiválasztásához add vissza a megadott pakli position indexű kártyáját.
julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> get_item(stack, position)
4
Végezz egy kis kézügyességet, és cseréld ki a position indexű kártyát a megadott cserekártyára.
Add vissza a módosított paklit.
julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> replacement_card = 6;
julia> set_item!(stack, position, replacement_card)
[1, 2, 6, 1]
Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli tetejére. Add vissza a módosított paklit.
julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_top!(stack, new_card)
[5, 9, 7, 1, 8]
Tüntesd el a kártyát úgy, hogy eltávolítod a megadott position helyen lévő kártyát a pakliból.
Add vissza a módosított paklit.
julia> stack = [3, 2, 6, 4, 8];
julia> position = 3;
julia> remove_item!(stack, position)
[3, 2, 4, 8]
Tüntesd el a kártyát úgy, hogy eltávolítod a pakli tetején lévő kártyát. Add vissza a módosított paklit.
julia> stack = [3, 2, 6, 4, 8];
julia> remove_item_from_top!(stack)
[3, 2, 6, 4]
Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli aljára. Add vissza a módosított paklit.
julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_bottom!(stack, new_card)
[8, 5, 9, 7, 1]
Tüntesd el a kártyát úgy, hogy eltávolítod a pakli alján lévő kártyát. Add vissza a módosított paklit.
julia> stack = [8, 5, 9, 7, 1];
julia> remove_item_at_bottom!(stack)
[5, 9, 7, 1]
Ellenőrizd, hogy a pakli mérete egyenlő-e a stack_size értékkel vagy sem.
julia> stack = [3, 2, 6, 4, 8];
julia> stack_size = 4;
julia> check_size_of_stack(stack, stack_size)
false
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.