En el curso de la escritura de un programa de computadora, a menudo necesitará agrupar varios elementos en una colección de alguna forma. JS ++ proporciona dos tipos de colecciones para ayudarlo en estos contextos: arrays y diccionarios . Ellos serán el foco de este tutorial.
arreglos
Comenzaremos con arreglos. Cree una nueva carpeta llamada Colecciones y luego cree un nuevo archivo llamado «Collections.jspp». Escribe el siguiente código:
string[] friendsArray = ["Anna", "Betty", "Chris", "David"];
Este código demuestra una manera simple de crear una string
array y llenarla con cuatro elementos. La array se asigna a una variable llamada friendsArray
, que pertenece al tipo string[]
. Tenga en cuenta que la variable de array hace referencia específica al tipo de elemento que puede contener la array: string[]
las variables solo pueden tomar arrays de string
elementos, no arrays de ningún otro tipo. Si tratáramos de asignar una int
array a una string[]
variable, nuestro código no se compilaría.
Los elementos de una array están ordenados y a cada uno se le asigna un índice numérico, comenzando en cero y aumentando en 1 para cada elemento sucesivo. Entonces, en friendsArray
, por ejemplo, a «Anna» se le asigna el índice 0, a «Betty» se le asigna el índice 1, y así sucesivamente.
Es útil que cada elemento de una array tenga un índice, ya que permite acceder a los elementos individualmente. Para ver cómo funciona esto, escribamos un código que muestre elementos particulares friendsArray
en un documento HTML. Cree un segundo archivo llamado «Collections.html» y escriba lo siguiente:
<!DOCTYPE html> <title>Collections program</title> <body> <p id="content"></p> <script src="http://code.jquery.com/jquery-1.12.4.min.js"></script> <script src="Collections.jspp.js"></script> </body> </html>
Guarde Collections.html en su carpeta Collections. Ahora regrese a Collections.jspp y agregue dos líneas adicionales a la que ya tiene:
external $; string[] friendsArray = ["Anna", "Betty", "Chris", "David"]; $("#content").append(friendsArray[0], " ", friendsArray[2]);
Mire la última línea aquí, y en particular las expresiones friendsArray[0]
y friendsArray[2]
. Estas expresiones se utilizan para acceder a los elementos de la array en el índice 0 y el índice 2 (el primer y tercer elemento de la array, dado que la numeración del índice comienza desde cero). Si compila su código y abre Collections.html en un navegador, verá que muestra «Anna Chris».
También puede usar un índice de array para cambiar el elemento en ese índice. Por ejemplo, supongamos que después de crear nuestra array, queremos cambiar el segundo elemento a «Brian». Podemos hacerlo escribiendo:
friendsArray[1] = "Brian";
Arrays irregulares
JS++ también le permite crear los llamados arreglos escalonados (también conocidos como arreglos de arreglos): arreglos que contienen otros arreglos como elementos. Por ejemplo, podríamos querer crear una array cuyos elementos sean string
arrays. Podríamos hacerlo de la siguiente manera:
string[][] jaggedArray = [["Anna", "Betty"], ["Chris", "David"]];
Para acceder a una de las arrays internas en jaggedArray
, usaría la misma sintaxis que antes: jaggedArray[1]
devolvería la array que contiene «Chris» y «David», por ejemplo. Para acceder a un elemento dentro de una de las arrays internas, debe especificar dos índices: el primero para indicar la array interna y el segundo para indicar el elemento específico en esa array interna. Por ejemplo, jaggedArray[1][0]
devolvería «Chris», mientras jaggedArray[0][1]
que devolvería «Betty».
Iterando sobre arreglos
Al usar arreglos, a menudo querrá iterar sobre sus elementos. Hay dos formas principales de hacer esto. La primera es usar un for
ciclo regular, del tipo que vimos en el capítulo 5:
string[] friendsArray = ["Anna", "Betty", "Chris", "David"]; for (int i = 0; i < friendsArray.length; ++i) { $("#content").append(friendsArray[i], " "); }
Observe la cláusula de condición del for
ciclo, que usa la expresión friendsArray.length
. Esta expresión devuelve el número de elementos en friendsArray
, por lo que tiene sentido usar la expresión para limitar el número de iteraciones del ciclo.
length
es un ejemplo del llamado «método getter». Un método es una función que pertenece a una clase en particular , y un captador es un tipo particular de método que se puede llamar sin usar paréntesis. Veremos con más detalle los métodos (captadores y otros tipos) y las clases en el capítulo 11. El length
método pertenece a la Array<T>
clase, lo que hace que esté disponible para usar en arreglos. Veremos algunos de los otros métodos en la Array<T>
clase más adelante en el tutorial.
Nota: Los métodos de la Array<T>
clase están disponibles para usar en arrays primitivas (del tipo que estamos examinando en este tutorial) debido a un proceso conocido como autoboxing . El autoboxing ocurre cuando un valor primitivo se convierte automáticamente en una instancia de una clase «envoltura» asociada. En este contexto, cuando usa un método como length en una array primitiva, la primitiva se autoencajona en una instancia de la Array<T>
clase contenedora, lo que permite usar el método. Cubriremos el autoboxing con más detalle en el capítulo 13.
La otra forma principal de iterar sobre una array es usar un foreach
bucle:
string[] friendsArray = ["Anna", "Betty", "Chris", "David"]; foreach (string name in friendsArray) { $("#content").append(name, " "); }
Un foreach
bucle como este es más fácil de escribir que un for
bucle normal, pero no le da acceso al índice de cada elemento de la forma en que lo hace un for
bucle normal. Entonces, al decidir qué tipo de ciclo usar, será importante considerar si necesita acceder a los índices de la array.
Arrays y parámetros variádicos
En el capítulo anterior, notamos que las funciones pueden tener un parámetro variádico , lo que permite que la función tome una cantidad infinita de argumentos para ese único parámetro. Cuando los argumentos se dan a la función, se almacenan como una array. Aquí hay un ejemplo de una función con un parámetro variádico.
int add (...int numbers){ int total = 0; foreach (int number in numbers){ total += number; } return total; } $("#content").append(add(1, 2, 3));
La add
función se declara con el parámetro variadic … numbers
. Cuando se llama a la función, se le asignan los argumentos 1, 2 y 3. Estos argumentos se almacenan como una array denominada numbers
, que luego está disponible para acceder a ella en el cuerpo de la función. En este ejemplo, recorremos los elementos de la array y luego devolvemos su suma.
Nota: una función no puede tener más de un parámetro variádico.
métodos de array
Anteriormente en el tutorial, analizamos el length
método de la Array<T>
clase, que devuelve la cantidad de elementos en una array. La Array<T>
clase contiene muchos métodos útiles, además de length
, y en esta sección veremos brevemente algunos de los principales: indexOf
, sort
, push
y pop
.
El indexOf
método devuelve el primer índice de un elemento de búsqueda, o -1 si el elemento no se pudo encontrar en la array:
string[] friendsArray = ["Anna", "Betty", "Chris", "David"]; $("#content").append(friendsArray.indexOf("David"));
El sort
método se puede utilizar para ordenar una array, si los elementos de la array se pueden ordenar. (Para obtener más información sobre la capacidad de clasificación y los comportamientos de clasificación, consulte aquí: el método de clasificación ). Por ejemplo, podríamos clasificar una int
array en orden numérico ascendente como este:
int[] numbersArray = [7, 2, 9, 5]; numbersArray.sort(); foreach (int number in numbersArray) { $("#content").append(number, " "); }
Para agregar uno o más elementos al final de una array, utiliza el push
método:
int[] numbersArray = [7, 2, 9, 5]; numbersArray.push(6, 5); foreach (int number in numbersArray) { $("#content").append(number, " "); }
Para eliminar el último elemento de una array, utiliza el pop
método:
int[] numbersArray = [7, 2, 9, 5]; numbersArray.pop(); foreach (int number in numbersArray) { $("#content").append(number, " "); }
Para obtener una lista completa de los métodos de la Array<T>
clase, consulte aquí:
Diccionarios
Los diccionarios son un tipo diferente de colección de arrays. La principal diferencia es que, mientras que las arrays contienen elementos individuales, los diccionarios contienen pares clave-valor . Echemos un vistazo a un código que crea un diccionario JS++. Antes de escribir el código nuevo, elimine el código que ya tiene en Collections.jspp. Ahora escribe lo siguiente:
import System; Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54};
En la primera línea, importas el System
módulo. No cubriremos los módulos en detalle hasta el próximo capítulo, pero por ahora el punto clave es que esta declaración de importación le permite usar la Dictionary<T>
clase, que se encuentra en la biblioteca estándar de JS++. (Cubriremos la biblioteca estándar de JS++ en el capítulo 13). Sin la declaración de importación, el código que viene después no se compilaría.
Sin embargo, con la declaración de importación en su lugar, su código se compila y crea un diccionario que almacena los nombres de los amigos y sus edades en un formato clave-valor. Para cada par clave-valor, la clave es el nombre de la persona y el valor es su edad. El tipo del diccionario es Dictionary<int>
, ya que el valor de cada par clave-valor es un int
. No necesitamos especificar el tipo de clave, además del tipo de valor, ya que el tipo de clave en cualquier diccionario siempre debe ser string
.
Nota: al escribir las claves para un diccionario JS++, es opcional usar comillas. Entonces, por ejemplo, en lugar de escribir Dictionary<int> dict = {"a": 1};
, también podría escribir Dictionary<int> dict = {a: 1};
El compilador sabe que sus claves deben ser strings, por lo que las comillas se asumirán implícitamente si las omite.
Los pares clave-valor de un diccionario no están ordenados y no se les asigna un índice. Para acceder a un par en particular, usa su clave. Por ejemplo, si quisiéramos mostrar la edad de Anna y la edad de Chris en nuestro documento HTML, podríamos hacerlo así:
import System; external $; Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; $("#content").append(friendsAges["Anna"], " ", friendsAges["Chris"]);
La expresión friendsAges["Anna"]
devuelve el valor correspondiente a «Anna» y la expresión friendsAges["Chris"]
devuelve el valor correspondiente a «Chris». Entonces, si compila este código y abre Collections.html en un navegador, su documento mostrará «47 35».
También puede usar una clave para cambiar el valor de un par clave-valor:
friendsAges["Anna"] = 48;
Esto cambia el valor correspondiente a “Anna” a 48. No inserta un nuevo par clave-valor en friendsAges
, porque un diccionario no puede tener dos pares con la misma clave. Para insertar un nuevo par en el diccionario, tendría que usar una clave diferente:
friendsAges["Emily"] = 39;
Iterando sobre diccionarios
Es fácil iterar tanto sobre las claves como sobre los valores de un diccionario. Para iterar sobre las claves, usa un for...in
bucle:
Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; for (string name in friendsAges){ $("#content").append(name, ": ", friendsAges[name], ", "); }
La forma más sencilla de iterar sobre los valores de un diccionario, por el contrario, es usar un foreach
bucle:
Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; foreach (int age in friendsAges){ $("#content").append(age, " "); }
Métodos de diccionario
Anteriormente vimos que la Array<T>
clase contiene muchos métodos útiles que puede usar en arrays. De manera similar, la Dictionary<T>
clase contiene varios métodos que puede usar en los diccionarios. En esta sección, veremos brevemente tres de los más importantes: length
, contains
y remove
.
El length
método funciona exactamente como cabría esperar, dado el comportamiento del método correspondiente en la Array<T>
clase: devuelve el número de pares clave-valor en el diccionario:
Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; $("#content").append(friendsAges.length);
El contains
método se puede utilizar para comprobar si un diccionario contiene una determinada clave:
Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; if(friendsAges.contains("Anna")){ $("#content").append("Anna found!"); } else { $("#content").append("Anna not found!"); }
El remove
método se puede utilizar para eliminar una clave particular y su valor asociado de un diccionario:
Dictionary<int> friendsAges = {"Anna": 47, "Betty": 28, "Chris": 35, "David": 54}; friendsAges.remove("Anna"); for (string name in friendsAges){ $("#content").append(name, " "); }
Para obtener una lista completa de los métodos de la Dictionary<T>
clase, consulte aquí:
Métodos en la clase Dictionary<T>
Publicación traducida automáticamente
Artículo escrito por CharlesKozenyPelling y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA