Array
An array can store multiple values of different data types sequentially
Introducció
Una manera habitual d’agrupar un conjunt de valor és mitjançant una seqüència.
Typescript té una estructura de dades de tipus [] que es fa servir per guardar els elements que tu vulguis en una “array”.
Edita el fitxer main.ts:
Com que els elements de l’array estan ordenats pots accedir a cada element per la seva posició dins de l’array.
[ => 6
[ => 8
[ => 11Només has de tenir en compte que es comença a contar des del número 0.
Has d’accedir indicant la posició entre claudàtors:
list // 6
list // 8
list // 11A continuació tens una llista de fruites:
}Què passa si intentes accedir al cinquè element de la llista?
Show solution
fruitExecutem el codi:
El valor de la variable fruit és undefined perquè la llista només té tres elements.
Si vols pots modificar un element de la llista indicant la seva posició:
fruits = "Banana"
fruits // [ "Apple", "Banana", "Plum" ]També pots saber la mida d’una llista amb la propietat length:
fruits.length // 3Si vols pots afegir elements a una llista:
"Banana"
"Apricot"
"Cherry"
fruits // [ "Banana", "Apricot", "Cherry" ]Els elements sempre s’afegeixen al final de la llista.
for
Una de les operacions més habituals amb un array és recórrer tots els elements de la llista.
Amb for .. of pots recórrer tots els elements d’una llista:
forof fruits fruit
}A continuació et mostrarem algunes solucions que no són del tot eficients, de moment!
Un codi primer ha de funcionar, després ha de funcionar bé, i per últim funcionar ràpid.
I el més important, un codi s’ha de poder llegir i entendre a la primera.
map
Una operació habitual és transformar una llista aplicant una transformació a cada element de la llista:
A continuació tens un exemple:
for of xs x * 2
}
ys // [ 16, 18, 8, 10, 12 ]
}filter
Una altre operació habitual és filtrar els elements d’una llista.
Per exemple, només vols una llista amb els valors més grans que 5:
for of xs if x > 5
x
}
ys // [ 8, 9, 6 ]
}reduce
Un algoritme habitual en llistes es reduir la llista a un sol valor.
Per exemple, pots sumar tots els elements de la llista:
for of xs sum += x
}
sum // 50Calcula la mitjana aritmètica de la llista:
Show solution
for of xs sum += x
}
mean // 5.36
}find
Una altra operació habitual és buscar si una llista té un element.
for of fruits if fruit == target result = true
break
}
}
result // trueActivitat
1. Tens una llista xs de tipus number[].
Busca el valor màxim de la llista
// ...
max // 9Show solution
for of xs if x > max
max = x
}
max // 92. A continuació tens una llista de persones:
"Olivia Bennett", "Ava Morgan", "Noah Mitchell", "Mia Harper", "Liam Parker"]Crea una nova llista només amb les persones que el seu nom és Olivia.
"Olivia Bennet""Olivia" // trueShow solution
"Olivia Bennett", "Ava Morgan", "Noah Mitchell", "Mia Harper", "Liam Parker"]
for of xs if "Olivia"
x
}
result // [ "Olivia Anderson", "Olivia Bennett" ]3. Molts cops tens una llista de notes en que et falta alguna nota perque l’alumne no ha fet l’examen.
Calcula la mitjana aritmètica d’aquesta llista:
// ...
mean //5.36Show solution
// Creem una llista nova sense els valors null
for of xs if x == null // si un element és null no el processem
continue
x
}
// Sumem tots els valors de la llista filtrada
for of ys sum += y
}
// Calculem la mitjana aritmètica
mean //5.36Llistes imbricades
Una llista pot estar formada per llistes:
,
,
]Per processar aquesta llista necessites escriure dos bucles.
Per exemple, pots afegir tots els números en una sola llista:
,
,
]
for of xss for of xs x
}
}
ys // [3, 4, 5, 2, 3, 8, 9, 1, 4, 9, 1, 1, 2, 0, 9]Activitat
1. Crea una llista amb les sumes de cada llista.
,
,
]
// ...
ys // [ 25, 24, 12 ]Show solution
,
,
]
for of xss
for of xs y += x
}
y
}
ys // [ 25, 24, 12 ]2. Crea una llista amb la mitja aritmètica de cada llista.
,
,
]
// ...
ys // [ 4.16, 4.8, 3 ]Show solution
,
,
]
for of xss
for of xs sum += x
}
sum / xs.length
}
ys // [ 4.16, 4.8, 3 ]Slice
La funció slice(start,end) torna una vista parcial de la llista.
ys // [ "ant", "bison" ]El segon paràmetre és opcional:
ys // [ "duck", "elephant" ]També pots utilitzar índexs negatius (comencen a contar al revés de dreta a esquerra):
ys // [ "bison", "camel", "duck" ]La funció slice és útil quan només vols processar un conjunt d’elements de la llista.
for of 0,3 sum += x
}
sum // 12Activitats
1. Calcula la mitjana aritmètica dels 5 primers valors de la llista:
// ...
mean // 5.2Show solution
for of 0, 5 if x == null
continue
sum += x
n += 1
}
sum / n // 6.52- Calcula la mitjana aritmètica dels 5 primers números de la llista (has d’ometre els valors null):
// ...
mean // 5.2Show solution
mean // 6.4*3. A continuació tens una llista de lectures de temperatures de l’observatori “Can Pixa” que necessita urgentment un nou lector de temperatures.
Calcula la mitja de la temperatura de cada dia filtrant aquelles temperatures que són clarament errònes:
,
,
]Show solution
,
,
]
for of tss
for of ts if t == null || t < -30 || t > 90
continue
sum += t
n+=1
}
sum / n // [ 37.666666666666664, 2.5, 9.5 ]
}
result4.. Escriu un codi que vagi preguntat a l’usuari un número fins que encerti algun de la llista.
Has de donar pistes a l’usuari!
* 100000)
xsShow solution
* 100000)
while !found
for of xs if guess == x "Ben Fet!"
found = true
break
}
if tmp < pista pista = tmp
}
}
if !found pista -= * pista
pista
}
}5- A continuació tens una llista de llistes de números.
Escriu un codi que torni la llista en què la suma dels seus números és menor:
,
* 100000))
xssShow solution
,
* 100000))
for of xss
if sum < min result = xs
min = sum
}
}
`Llista: `
`Suma: `