+ - 0:00:00
Notes for current slide
Notes for next slide

Estrutures de dades

Mateu Yábar Valles

1 / 21

Llicència

Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència

Autors:

2 / 21

Collection

  • Representa un conjunt d'objectes
    • List: elements ordenats -> Visites d'un metge
    • Set: no ordenats i sense repeticions -> número de loteria
    • Map (dictionary): conjunt de parelles clau-valor -> codi mòdul i professor M03DAW1 - Marc
3 / 21

Collection in kotlin

Per cada tipus de basic de collections hi ha:

  • Una interfície read-only només per accedir als elements de la col·lecció.

  • Una interfície mutable que exté la corresponent interfície read-only amb operacions d'escriptura: add, remove i update del seus elements.

4 / 21

Collections

collection

5 / 21

Operacions de collections

  • size -> mida de la col·lecció.
  • contains(element) -> comprova si existeix l'element a la col·lecció.
    println(elem in collection) // recomanat
    println(collection.contains(elem))
  • containsAll(elements) -> comprova que tots els elements siguin a la col·lecció.
  • isEmpty() -> Indica si la col·lecció és buida
  • joinToString() -> Converteix la col·lecció a string.
6 / 21

Operacions de col·leccions mutables

  • clear() -> Elimina tots els elements d'una col·lecció.
  • add(element) -> Afegeix l'element a la col·lecció.
  • remove(element) -> Elimina la primera occurrència de l'element a la col·lecció.
  • removeAll(elements)-> Elimina tots els elements especificats de la col·lecció.
7 / 21

Set

  • Col·lecció que no conté duplicats
val numbers = setOf(1, 2, 3, 4)
if (numbers.contains(1)) println("1 is in the set")
val numbersBackwards = setOf(4, 3, 2, 1)
println("The sets are equal: ${numbers == numbersBackwards}")
val studentName = mapOf("Mike" to 9).keys
8 / 21

MutableSet

val set = mutableSetOf(1,2)
set += 4
set -= 1
9 / 21

Associacions

Volem guardar la nota dels estudiants, ho podriem representar així

val studentsName = mutableListOf("Roc", "Santiago", "Ona", "Muhammad")
val studentsMarks = mutableListOf(6, 4, 8, 7)
studentsName.forEachIndexed{index, elem -> println("${elem}=${studentsMarks[index]}")}
  • Inconvenient, sempre que modifiquem una taula hauriem de modificar l'altre, Font d'errors!
  • Per trobar la nota de l'Ona hem de iterar quasi tota la llista
10 / 21

Pair

classDiagram class Pair{ +first : A +second : B }
  • El tipus de first i second depen dels arguments que passes quan crides la constructora
val associacio: Pair<String, String> = Pair("Gos", "bup bup")
val associacio = "Gos".to("bup bup")

La funció to() té una característica especial, es pot utilitzar sense puntuació! (infix function)

val associacio = "Gos" to "bup bup"
11 / 21

Map

val students: Map<String, Int> = mapOf(
"Roc" to 6,
"Santiago" to 4,
"Ona" to 8,
"Muhammad" to 7
)
println(students)
val grade = students["Ona"] // per imprimir la nota de l'Ona ara és directe
  • Els l "que mapegen", els de la columna esquerra s'anomenen claus: keys.
  • Els elements que "són mapejats", els de la columna dreta són els valors: values.
  • L'associació clau-valor (key-value) d'un map s'anomena entrada: entry.
12 / 21

Map: buscar valors

mapOf(varargs pairs: Pair)

var nota = students.get("Ona")
var nota = students["Ona"]
  • get() És una funció que retorna un nullable type
  • getValue() retorna un non-nullable type, però si la clau no existeix genera un error i s'atura l'execució.
  • getOrDefault()
13 / 21

Map : afegir/modificar elements

  • Sobre mutableMaps
    students.put("Ona",10)
    students.remove("Santiago")
14 / 21

Map funcions

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
println("All keys: ${numbersMap.keys}")
println("All values: ${numbersMap.values}")
if (numbersMap.containsValue(1)) println("The value 1 is in the map") // same as previous
15 / 21

Map operacions

students.forEach { entry ->
println("L'alumne ${entry.value} ha tret un ${entry.key}")
}
students.forEach { (name,mark) ->
println("L'alumne ${name} ha tret un ${mark}")
}
16 / 21

Map operacions

val matriculaHonor = students.filter { entry ->
entry.value.contains(10)
}
17 / 21

Mapping a map

val newMarks = students
.mapKeys { entry -> entry.key.replace("Ona", "Meritxell") }
.mapValues { entry -> entry.value.replace(4, 5) }
18 / 21

Init maps

val emptyStringToDoubleMap = emptyMap<String, Double>()
val persons = listOf(Person("Mar", 25), Person("Pere", 14))
val personsByName : Map<String, Person> = persons.associateBy{ it.name }
val personsByName2 : Map<String, List<Person>> = persons.groupBy{ it.name }
19 / 21

TreeMap

hashMap

20 / 21

Altres estructures

21 / 21

Llicència

Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència

Autors:

2 / 21
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow