Ako používať výrazy Kotlin Range

1. Úvod

Rozsah je postupnosť hodnôt definovaných začiatkom, koncom a krokom.

V tomto rýchlom návode sa pozrieme na to, ako môžeme definovať a používať rozsahy v Kotline.

2. Používanie rozsahov Kotlin

V Kotline môžeme vytvárať rozsahy pomocou rangeTo () a nadol () funkcie alebo .. operátor.

Môžeme použiť rozsahy pre akýkoľvek porovnateľný typ.

Predvolene sú inkluzívne, čo znamená, že výraz 1..4 zodpovedá hodnotám 1,2,3 a 4.

Navyše, existuje ešte jedna predvolená hodnota: vzdialenosť medzi dvoma hodnotami, ktoré sa nazývajú krok, s implicitnou hodnotou 1.

Pozrime sa teda teraz na niekoľko príkladov vytvárania rozsahov a použitia ďalších užitočných metód na ich manipuláciu.

2.1. Vytváranie rozsahov

Rozsahy implementujú spoločné rozhranie - Uzavretý rozsah. Výsledok a Uzavretý rozsah je postup (ako napr IntProgression, LongProgression, alebo CharProgression).

Tento postup obsahuje začiatok, úplný koniec a krok a je to podtyp Iterable kde N je Int, Long alebo Char.

Začnime tým, že sa pozrieme na najjednoduchší spôsob vytvorenia rozsahu pomocou znakov „..“ a v operátori:

(i v 1..9)

Tiež, ak chceme definovať spätný rozsah, môžeme použiť dole operátor:

(i v 9 dole k 1) 

Tento výraz môžeme tiež použiť ako súčasť znaku ak príkaz na kontrolu, či hodnota patrí do rozsahu:

ak (3 v 1..9) tlačiť („áno“)

2.2. Iteračné rozsahy

Teraz, keď môžeme použiť rozsahy s čímkoľvek porovnateľným, ak chceme iterovať, potrebujeme integrálny rozsah typov.

Poďme sa teraz pozrieť na kód na iteráciu v rozsahu:

for (i in 1.rangeTo (9)) {print (i) // Print 123456789} for (i in 9.downTo (1)) {print (i) // Print 987654321}

Rovnaký prípad použitia platí pre znaky:

for (ch in 'a' .. 'f') {print (ch) // Print abcdef} for (ch in 'f' downTo 'a') {print (ch) // Print fedcba}

3. Pomocou step () Funkcia

Využitie krok () funkcia je dosť intuitívna: môžeme ju použiť na definovanie vzdialenosti medzi hodnotami rozsahu:

for (i in 1..9 step 2) {print (i) // Print 13579} for (i in 9 downTo 1 step 2) {print (i) // Print 97531}

V tomto príklade iterujeme dopredu a dozadu cez hodnoty od 1 do 9 s krokovou hodnotou 2.

4. Pomocou obrátené () Funkcia

Ako už názov napovedá, obrátené () funkcia obráti poradie rozsahu:

(1..9) .reversed (). ForEach {print (it) // Print 987654321} (1..9) .reversed (). Step (3) .forEach {print (it) // Print 963}

5. Pomocou do () Funkcia

Keď chceme vytvoriť rozsah, ktorý vylučuje koncový prvok, môžeme ho použiť do ():

pre (i v 1 do 9) {print (i) // Print 12345678}

6. posledný,najprv,krok Prvky

Ak potrebujeme nájsť prvý, krok alebo poslednú hodnotu rozsahu, existujú funkcie, ktoré nám ich vrátia:

print ((1..9) .first) // Print 1 print ((1..9 step 2) .step) // Print 2 print ((3..9) .reversed (). last) // Print 3

7. Filtračné rozsahy

The filter () funkcia vráti zoznam prvkov zodpovedajúcich danému predikátu:

val r = 1..10 val f = r.filter {it -> it% 2 == 0} // Tlač [2, 4, 6, 8, 10]

Môžeme použiť aj ďalšie funkcie ako napr mapa () a znížiť () do nášho sortimentu:

val m = r.map {it -> it * it} // Tlač [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] val rdc = r.reduce {a, b -> a + b} // Tlač 55 

8. Ďalšie užitočné funkcie

Existuje mnoho ďalších funkcií, ktoré môžeme použiť v našom rozsahu, napríklad min., max., súčet, priemer, počet, zreteľne:

val r = 1..20 print (r.min ()) // Print 1 print (r.max ()) // Print 20 print (r.sum ()) // Print 210 print (r.average () ) // Tlač 10,5 print (r.count ()) // Tlač 20 val opakovane = listOf (1, 1, 2, 4, 4, 6, 10) print (opakovane.distinct ()) // Tlač [1, 2, 4, 6, 10] 

9. Vlastné objekty

Je tiež možné vytvoriť rozsah nad vlastnými objektmi. Z tohto dôvodu je jedinou požiadavkou rozšírenie Porovnateľné rozhranie.

Dobrým príkladom je enum. Všetky výčty v Kotline sa rozširujú Porovnateľné čo znamená, že v predvolenom nastavení sú prvky zoradené v poradí, v akom sa objavujú.

Vytvorme rýchlo Farba enum:

trieda výčtu Farba (val rgb: Int): Porovnateľná {MODRÁ (0x0000FF), ZELENÁ (0x008000), ČERVENÁ (0xFF0000), MAGENTA (0xFF00FF), ŽLTÁ (0xFFFF00); } 

A potom ho v niektorých použite ak Vyhlásenia:

val range = red..yellow if (range.contains (Color.MAGENTA)) println ("true") // Print true if (Color.RED in Color.GREEN..Color.YELLOW) println ("true") / / Print true if (Color.RED! In Color.MAGENTA..Color.YELLOW) println ("true") // Tlač true

Pretože však nejde o integrálny typ, nemôžeme nad ním iterovať. Ak to skúsime, zobrazí sa chyba kompilácie:

fun main (args: Array) {for (c in Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop range must have an iterator () method}

A ak chceme mať vlastný rozsah, ktorý môžeme iterovať, musíme ho implementovať Uzavretý rozsah ako aj Iterátor.

10. Záver

V tomto článku sme si ukázali, ako môžeme používať výrazy rozsahu v Kotline a rôzne funkcie, ktoré môžeme použiť.

Ako vždy je zdrojový kód k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found