IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 7. diel - Poľa v Kotlin

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
neutr
Člen
Avatar
neutr:21.4.2018 12:11

Opravdu jsem velice zvědavý co bude tím překvapením. Velice bych pohledával například automatické předimenzování pro přídání a ubrání prvku spolu s automatickým přetříděním. Také bych uvítal možnost vkládat prvky do pole aniž bych musel přídávat prvek na konec a pak mu udělat místo oditerováním zbytku na poslední (nový), nebo to řešit pomocí split/merge. Ještě více bych si cenil těchto operací na vícedimenzionálních polích. Zejména u kolekcí.

Konkrétně klasická array(x,y), nebo i array(x,y,z) do typu array(x)(y), respektive array(x)(y)(z) - tedy do nesymetricých kolekcí, nebo alepoň sofistikovanější operace s Empty prvky symetrických polí (objektů - matic).


Mimo svých velkých očekávání bych si dovolil poznámku k popisu metod pole - příklad sort() a sorted(). Musel jsem se 3x vrátit aby mi došlo, že v podstatě sort() provede setřídění pro výstup, ale zůstane v původním rozložení, zatímco sorted() udělá změnu přímo v array. On totiž výstup podle doporučení vydá úplně stejný výsledek. Určitě není snadné najít rozdíl

val simpsonovi_sorted = simpsonovi.sor­tedArray()
poznámkou - simpsonovi_sorted = arrayOf("Bart", "Homer", "Lisa", "Maggie", "Marge")
simpsnovi_sorted
for (simpson in simpsonovi_sorted) {

Pokud se mýlím tak mne opravte. Pole zpracované jako sorted() stačí vypsat podle indexu, ale třídit se už nemusí - je už setříděné. Ono to tam sice je, ale je to málo zřetelné když hledáme rozdíl. Díky

 
Odpovedať
21.4.2018 12:11
Avatar
gcx11
Tvůrce
Avatar
Odpovedá na neutr
gcx11:21.4.2018 19:24

Pokud člověk neví předem, kolik prvků potřebuje uložit, tak se hodí MutableList.

val items = mutableListOf<Int>()
items.add(1)
items.add(2)

S tím automatickým přetříděním je to složitější. Nejlepší je mít nějakou vlastní kolekci, která využívá toho, že je zbytek setříděný, ale to je složitější na napsání a bohužel Kotlin (Java) přímo něco takového nemá.

Co by šlo použít, tak je napsat si vlastní extension funkci. Příklad:

inline fun <reified T: Comparable<T>> MutableList<T>.addAndSort(item: T) {
    add(item)
    sort()
}

fun main(args: Array<String>) {
    val items = mutableListOf(7, 3, 6)
    items.addAndSort(5)
    print(items) // [3, 5, 6, 7]
}

Mimo svých velkých očekávání bych si dovolil poznámku k popisu metod pole - příklad sort() a sorted()

Je to složitější, sort provede setřídění na vstupním poli a nevrací nic, sorted vrátí nový seznam (List), který obsahuje seřazená data, ale původní pole nechá být a sortedArray dělá to samé, akorát vrací zase pole (Array).

 
Odpovedať
21.4.2018 19:24
Avatar
Michal Pariš:21.3.2019 10:07

trochu nechapem tej casti

Metoda sort() seřadí již existující pole (takže musí být deklarované pomocí var)

coho presne sa to tyka? lebo dalej je pouzite stale val a mne to zoradenie tiez funguje s val-om.

Odpovedať
21.3.2019 10:07
Those who ask a question, are stupid for 30 seconds. Those who never ask, are stupid for life.
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovedá na Michal Pariš
Samuel Kodytek:21.3.2019 11:58

sort() ti upraví tu stávájící instanci (pole), mezitím co sorted() ti vratí nové pole. Tohle se ti bude především hodit u OOP. Více to vysvětluji v tomto článku.

Hodí se obě dvě metody, a těžce se vysvětluje proč tomu tak je začátečníkovi (omlouvám se pokud nejsi začátečník :p )

Odpovedať
21.3.2019 11:58
There is more than one way to screw it
Avatar
Odpovedá na Samuel Kodytek
Michal Pariš:21.3.2019 13:14

tomu sort / sorted chapem len nechapem preco tam je napisane ze sa musi pole deklarovat ako var a pritom je vsade deklarovane ako val :)

tak to teda beriem tak ze zatial mi to netreba a pockam az sa dostanem na to OOP ;)

Odpovedať
21.3.2019 13:14
Those who ask a question, are stupid for 30 seconds. Those who never ask, are stupid for life.
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovedá na Michal Pariš
Samuel Kodytek:21.3.2019 13:36

Pole se může deklarovat obojím val nebo var.

val jen říká, že nemůžeš přepsat tu proměnou. Nějaké datové typy můžou být tzv. Třídy a mají v sobě ještě další proměnné, které ale už můžou jít přepsat, protože jsou třeba var. Jak jsem již říkal, špatně se to vysvětluje, bez znalostí OOP :/, ale určitě to pochopíš až se dostaneš k OOP :)

Odpovedať
21.3.2019 13:36
There is more than one way to screw it
Avatar
Guláš
Člen
Avatar
Guláš:19.6.2020 10:08

K čemu je dobrá tato podmínka " if (pozice != -1) ", ??

 
Odpovedať
19.6.2020 10:08
Avatar
Alesh
Tvůrce
Avatar
Odpovedá na Guláš
Alesh:19.6.2020 10:43

Ošetřuje situaci, kdy zadaný text není nalezen v kolekci.

Metoda nám najde první výskyt daného prvku v poli a vrátí jeho index jako Int. Může se stát, že prvek v poli není, v takovém případě metoda vrátí -1.

 
Odpovedať
19.6.2020 10:43
Avatar
Guláš
Člen
Avatar
Guláš:19.6.2020 12:22

Co dělá vlastnost** size** ??

 
Odpovedať
19.6.2020 12:22
Avatar
Alesh
Tvůrce
Avatar
Odpovedá na Guláš
Alesh:19.6.2020 12:26

Zkus si ten článek přečíst. ;-)

size jsme si již zmínili, obsahuje (vrací) počet prvků v poli.

 
Odpovedať
19.6.2020 12:26
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!