Kurzusok
/
Julia
Julia
/
Tanterv
/
Tartományok
Ta

Tartományok ebben a kurzusban: Julia

1 feladat

A(z) Tartományok fogalomról

Tegyük fel, hogy az összes nemnegatív egész számra szükséged van 1000-ig. Nevetséges lenne, ha ezeket egy tömbbe kellene begépelned.

Erre való a range típus:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

A tartományok nagyon gyakoriak: nemcsak gépelést spórolnak meg, hanem függvények visszatérési típusaként is előfordulnak.

Figyeld meg, hogy a tartományok nem tömbök.

A tömbök már a létrehozásuk pillanatában meghatározódnak („mohó” kiértékelés), és a tárhelyigényük arányos a tömb hosszával.

Ezzel szemben a tartományok csupán utasítások összessége egy sorozat előállításához („lusta” kiértékelés, más néven „iterátor”).

Ha a tartományra tömbként van szükséged, a collect() függvénnyel alakíthatod át:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

Igény szerint a collect(type, range) hívással megadhatod a kimeneti tömb típusát is.

A lépésköz is megadható, ebben az esetben 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

A szintaxis tehát start:stepsize:stop. Mindkét végpont beleértendő, ahogy az egész számos példában is látszik. Ha a lépésköz nem osztja pontosan a stop - start különbséget, az utolsó elem nem lépi túl a stop értékét.

Finomabb szabályozáshoz használd a Base.range() függvényt, amelynek számos további beállítási lehetősége van.

Betűtartományok

A tartományokban nem numerikus sorozatok is szerepelhetnek. A legegyszerűbb példa az ASCII-betűk:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

A Char típust egy másik fogalom tárgyalja majd részletesebben. Egyelőre tekintsd őket egyszeres idézőjelbe zárt karaktereknek.

Függvények és operátorok tartományokhoz

Egy tartomány határait a first() és a last() függvénnyel kérdezheted le.

Gyakran hasznos megtudni, hogy egy adott érték része-e egy tartománynak. Ezt a mögöttes in() függvény végzi, de gyakoribb az infix in operátor vagy annak matematikaibb szinonimája, a ∈ használata. Egy megfelelő szerkesztőben a ∈ gyorsbillentyűje: \in, majd tab.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10
 7 in r    # => true
 11 ∈ r    # => false

Az in és a ∈ operátor itt tartományokkal szerepel, de más gyűjteménytípusokkal is használható, például vektorokkal, halmazokkal és szótárakkal.

Még a tömbindexelésről

A tömbindexelésben egész számtartományok és tömbök is használhatók:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

Az end kulcsszóval együtt is működik, bár az operátorok elsőbbsége miatt zárójelekre lehet szükség:

 nums[(end - 3):end]
4-element Vector{Float64}:
 47.0
 48.0
 49.0
 50.0

Az index bármely eleme természetesen lehet egy korábban létrehozott egész típusú változó is.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Tartományok fogalmat