Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Introdujimos si y para en nuestro artículo anterior. Esto no debe practicarse. Practiquemos cómo usarlo.continue
Declaración para calcular la suma de números pares hasta 100. Mientras escribimos código,continue
La declaración nos ayudará a omitir ciertas iteraciones que no son necesarias; por ejemplo, en este ejemplo, omitiremos todos los números impares.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
En programación, a menudo necesitamos tratar con un conjunto de elementos del mismo tipo, y estos conjuntos de elementos están representados por estructuras de datos específicas en el lenguaje Go. Hoy les presentaré en detalle varios tipos de colecciones en Go: matriz, sector y mapa.
Primero, comencemos con las matrices. La matriz es la estructura de datos más básica en Go. Es una secuencia de longitud fija de elementos del mismo tipo. Una vez declarada una matriz, su longitud no se puede cambiar. La declaración e inicialización de matrices es muy simple,
Al declarar una matriz, debe especificar el tipo y la longitud de la matriz. Así es como se declara una matriz:
var arrayName [arrayLength]elementType
Por ejemplo, declare una matriz de enteros de longitud 5:
var numbers [5]int
Puede inicializar una matriz de varias maneras:
var numbers = [5]int{1, 2, 3, 4, 5}
:=
Breve declaración:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
Puede acceder a los elementos de una matriz por índice, comenzando desde 0:
value := numbers[2] // 获取索引为 2 的元素
puedes usarfor
Recorre todos los elementos de una matriz:
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
Puedes usar el incorporadolen
Función para obtener la longitud de una matriz:
length := len(numbers)
Si una matriz no se inicializa explícitamente, sus elementos se establecen automáticamente en el valor cero de su tipo. Por ejemplo, el valor cero de una matriz de números enteros es 0:
var numbers [5]int // 所有元素都是 0
El lenguaje Go también admite matrices multidimensionales. El siguiente es un ejemplo de declaración e inicialización de una matriz de enteros de 2x3:
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
Dado que la longitud de la matriz es fija, esto puede no ser muy flexible en algunos casos. Si necesita una colección de longitud variable, puede utilizar sectores.
El siguiente es el segmento, que es un tipo integrado más flexible que puede considerarse como una matriz dinámica. La longitud del segmento es variable y se crea en función de una matriz, lo que proporciona mayor comodidad. A continuación se explica cómo declarar e inicializar un segmento:
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
En el lenguaje Go, aunque tanto las matrices como los sectores se utilizan para almacenar una serie de elementos del mismo tipo, tienen diferencias significativas en la asignación de memoria, la variabilidad del tamaño y el uso. Estas son las principales diferencias entre matrices y sectores:
[3]int
y[4]int
son diferentes tipos.[]int
Es el tipo común para todos los sectores de números enteros.make
Función o corte de una matriz para inicializar, sin tamaño especificado.A continuación se muestran ejemplos de inicialización para matrices y sectores:
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
La función agrega elementos u obtiene subporciones mediante operaciones de corte.La matriz subyacente del segmento se puede asignar en el montón, y la complejidad temporal para acceder a los elementos del segmento también es O (1), peroappend
Puede dar lugar a una reasignación de la matriz subyacente, que suele ser una operación O(n).Finalmente, veamos el mapeo. Un mapa es una matriz asociativa en Go que asigna claves a valores. Las claves del mapa pueden ser de cualquier tipo admitido por el operador de igualdad, como números enteros, números de punto flotante, cadenas, punteros, interfaces (siempre que los valores contenidos dentro de la interfaz sean comparables), estructuras y matrices. El valor asignado puede ser de cualquier tipo.
La sintaxis para declarar un mapa es la siguiente:
var mapName map[keyType]valueType
Por ejemplo, declare un mapa con claves como cadenas y valores como números enteros:
var scores map[string]int
Después de declarar el mapa, debes pasar.make
función para inicializarlo para que pueda ser utilizado:
scores = make(map[string]int)
Alternativamente, puede utilizar una declaración corta e inicializar:
scores := make(map[string]int)
También puede utilizar literales para la inicialización en el momento de la declaración:
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
Si la clave no existe, se devolverá un valor cero para ese tipo de valor.
Puede usar el modismo coma -ok para verificar si la clave existe en el mapa:
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
usardelete
La función puede eliminar un par clave-valor del mapa:
delete(scores, "alice")
Si la clave no existe,delete
La función no hace nada.
usarfor
Un bucle puede atravesar todos los pares clave-valor del mapa:
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
El valor cero del mapa esnil
.unonil
Un mapa no tiene una estructura de datos subyacente y no puede agregar elementos.Antes de agregar elementos al mapa, debes usarmake
Inicializarlo.
Puedes usar el incorporadolen
Función para obtener el número de pares clave-valor en el mapa:
length := len(scores)
Las claves del mapa pueden ser de cualquier tipo comparable, como números enteros, números de punto flotante, cadenas, punteros, interfaces (siempre que los valores contenidos dentro de la interfaz sean comparables), estructuras, matrices, etc. Los sectores, mapas y funciones no se pueden utilizar como claves de mapa porque estos tipos no admiten comparaciones de igualdad.
En el lenguaje Go, matrices, sectores y mapas son tres estructuras de datos de uso común, cada una de las cuales tiene diferentes características y consideraciones. Aquí hay algunos puntos a tener en cuenta al usarlos:
nil
, debe inicializarse antes de su uso.nil
,nil
El mapa no se puede utilizar para almacenar pares clave-valor y debe inicializarse antes de su uso.delete
Eliminar una clave que no existe no genera un error, pero es seguro verificar si la clave existe.