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.