Colecciones
Las colecciones son estructuras de datos que nos sirven para almacenar información, manipularla y hacer diversas acciones. Tal como agregar, actualizar, borrar.
Listas (Arrays)
Las listas son una estructura de datos muy ocupadas para almacenar información en memoria.
Características de las listas (arrays)
- Los datos se almacenan uno al lado del otro
- El indice (index) comienza en 0.
- Se declara con corchetes cuadrados (
[ ]
) - Los elementos se separan por coma (
,
). - Dentro del operador diamante (
<>
) se coloca el tipo de objeto que contendrá la lista. - Puede almacenar un solo tipo de objeto. (Con
dynamic
todo puede pasar)
Warning
La longitud de la lista NO es lo mismo que el ultimo indice de la misma.
Declaración de una lista
Una convención para darle nombre a una lista es que este sea en plural, ya que si vemos el nombre, en automático sabemos que se trata de una lista.
List<tipo> nombreVariableEnPlural = <tipo> [ valor1, valor2, ... ];
// con var sabemos que infiere el tipo de manera automática, en ocasiones es mas conveniente definir el tipo de objeto
var lista = [elemento1, elemento2, ...];
//Forma larga, completa indicando todos los detalles
List<int> numbers = <int>[1,4,23,5,2,54,56,34,];
// Forma corta y rápida
var list = [ 1,4,23,5,2,54,56,34,];
Operador diamante <>
Colocando los símbolos de menor y mayor que (<>
), se conoce como operador diamante (esto viene de JAVA). Dentro de el se coloca el tipo de dato que contendrá la lista a crear.
Obteniendo datos individuales de una lista
Una vez tenemos una lista, la forma de extraer los elementos es por su indice; es decir, indicamos su posición y se asigna a una variable.
Esto se realiza colocando dentro de los corchetes cuadrados ([]
);
void main() {
List<int> numbers = <int>[1,4,23,5,];
int value1 = numbers[0];
int value2 = numbers[1];
int value3 = numbers[2];
int value4 = numbers[3];
print(value1); // 1
print(value2); // 4
print(value3); // 23
print(value4); // 5
}
Recorriendo una lista
Normalmente necesitamos conocer todos los elementos de una lista, y esto lo hacemos con un ciclo.
Note
Todo es un objeto, por lo tanto, la lista tiene campos y acciones. Entonces, la propia lista sabe cuantos elementos contiene, eso lo haces a traves de su campo length
;
void main() {
List<int> numbers = <int>[1,4,23,5,];
for(int i = 0; i < numbers.length; i++){
int value = numbers[i];
print(value);
}
}
Agregando elementos a una lista
El método para agregar elementos a una lista es con su propiedad add()
.
void main() {
List<int> numbers = <int>[1,4,23,5,];
numbers.add(9);
numbers.add(20);
print(numbers);
}
También podemos agregar una lista a otra lista
void main() {
List<int> numbers = <int>[1,4,23,5,];
List<int> numbers2 = <int>[23,53,2,6,8];
numbers.addAll(numbers2);// agregando una lista a otra.
print(numbers);
}
Removiendo elementos de una lista
Tenemos dos maneras de remover elementos:
- Por posición
- Por coincidencia (si hay varios repetidos, remueve el primero que encuentra)
void main() {
List<int> numbers = <int>[1,4,23,5,];
numbers.remove(23); // eliminara el numero 23
print(numbers);
}
void main() {
List<int> numbers = <int>[1,4,23,5,];
numbers.removeAt(1); // eliminara el numero 4, porque esta en la posición 1
print(numbers);
}
Note
En dart
la lista tienen campos y métodos directos para obtener el primero y ultimo elemento de la lista y el remover el ultimo; sin necesidad de colocar indices.
list.first;
list.last;
lista.removeLast();
En ocasiones podemos desear limpiar la lista completa, para esto usamos su método clear()
.
Conocer mas detalles de la API de dart con relación a listas en https://api.dart.dev/stable/3.2.4/dart-core/List-class.html
Sets
Las listas son una estructura de datos muy ocupadas para almacenar información que debe ser única; es decir, no se repite.
Características de las listas tipo SET
- No puede contener elementos repetidos.
- El indice (index) comienza en 0.
- Se declara con llaves (
{ }
) - Los elementos se separan por coma (
,
). - Dentro del operador diamante (
<>
) se coloca el tipo de objeto que contendrá la lista. - Puede almacenar un solo tipo de objeto. (Con
dynamic
todo puede pasar)
Una convención para darle nombre a las listas es que este sea en plural, ya que si vemos el nombre, en automático sabemos que se trata de una lista.
Declaración de una lista tipo SET
Set<tipo> nombreVariableEnPlural = <tipo> { valor1, valor2, ... };
// con var sabemos que infiere el tipo de manera automática, en ocasiones es mas conveniente definir el tipo de objeto
var nombreVariableEnPlural = { elemento1, elemento2, ...};
//Forma larga, completa indicando todos los detalles
Set<int> numbers = <int>{1,4,23, 1, 5,2,54,56,34,}; // Resultado: {1, 4, 23, 5, 2, 54, 56, 34}
// Forma corta y rápida
var list = {1,4,23, 1, 5,2,54,56,34,}; // Resultado: {1, 4, 23, 5, 2, 54, 56, 34}
Mapas (Maps
) (Pendiente)
Son estructura de datos tipos llave-valor, la llave debe ser única, valor puede se puede repetir sin ningún problema. Tambien conocidos como diccionarios
o hash
.
Características de los Maps
- La llave es única.
- Se declara indicando el tipo de llave y el tipo de valor que contendrá (
< tipoX, tipoY > { }
) - Los pares se separan por coma (
,
). - Dentro del operador diamante (
<tipoX, tipoY>
) se coloca el tipo de objeto de llave que se usara (es única), el tipo de valor tendrá asociado. - Puede almacenar un solo tipo de objeto. (Con
dynamic
todo puede pasar) - Se usa dos puntos (
:
), para asociar la llave y su valor; es decir,llave : valor
.
Declaración de un Map
También se maneja la convecino del nombre de variable en plural.
// Por inferencia de tipo se vuelve muy cómoda la declaración de Maps
// Declarando con información, se infiere el tipo
var hawaiianBeaches = {
// llave : valor
'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
'Big Island': ['Wailea Bay', 'Pololu Beach'],
'Kauai': ['Hanalei', 'Poipu']
};
// Map a partir de su constructor
var searchTerms = Map(); // al no tener los tipos, sera automáticamente <dynamic, dynamic>
// Se indican los tipos de la llave y valor que contendrá el mapa/ maps vacíos
var nobleGases = Map<int, String>();
Map<int, String> nobleGases = <int,String>{};
Agregando valores a un Map
Obteniendo información de un Map
- Obtener por su llave
- Recorriendo el mapa
- Obtener por su llave
Removiendo elementos de un Map
Spread operator
Mas información de colecciones en https://dart.dev/language/collections