[Ir] Tutorial de idioma de Go: rango de idioma de Go (Rango) (14)

Revisión pasada:

Directorio de artículos


La palabra clave range es un azúcar sintáctico muy común y fácil de usar en el lenguaje Go. Se puede usar en el bucle for para iterar una matriz, un segmento, un mapa, un canal, una cadena y todo lo relacionado con la salida transversal.

¿cómo utilizar?

Tocamos el rango por primera vez en el ciclo en la sección anterior, y también sabemos que puede omitir la clave o el valor para recorrer, pero esta característica debe considerarse en combinación con la situación real.

La palabra clave range en el lenguaje Go se usa para iterar los elementos de una matriz (matriz), sector (segmento), canal (canal) o colección (mapa) en un bucle for. En arrays y slices devuelve el índice del elemento y el valor correspondiente al índice, y en colecciones devuelve un par clave-valor.

El formato de rango del bucle for puede iterar sobre segmentos, mapas, matrices, cadenas, etc. El formato es el siguiente:

for key, value := range oldMap {
    
    
    newMap[key] = value
}

La clave y el valor en el código anterior se pueden omitir.

Si solo desea leer la clave, el formato es el siguiente:

for key := range oldMap

o esto:

for key, _ := range oldMap

Si solo desea leer el valor, el formato es el siguiente:

for _, value := range oldMap

Ejemplo
Para recorrer una matriz simple, el resultado de 2**%d es la correspondiente potencia de 2:

ejemplo

package main

import "fmt"

var pow = []int{
    
    1, 2, 4, 8, 16, 32, 64, 128}

func main() {
    
    
   for i, v := range pow {
    
    
      fmt.Printf("2**%d = %d\n", i, v)
   }
}

El resultado de la ejecución del ejemplo anterior es:

2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128

El formato de rango del bucle for puede omitir la clave y el valor, como se muestra en el siguiente ejemplo:

ejemplo

package main
import "fmt"

func main() {
    
    
    map1 := make(map[int]float32)
    map1[1] = 1.0
    map1[2] = 2.0
    map1[3] = 3.0
    map1[4] = 4.0
   
    // 读取 key 和 value
    for key, value := range map1 {
    
    
      fmt.Printf("key is: %d - value is: %f\n", key, value)
    }

    // 读取 key
    for key := range map1 {
    
    
      fmt.Printf("key is: %d\n", key)
    }

    // 读取 value
    for _, value := range map1 {
    
    
      fmt.Printf("value is: %f\n", value)
    }
}

El resultado de la ejecución del ejemplo anterior es:

key is: 4 - value is: 4.000000
key is: 1 - value is: 1.000000
key is: 2 - value is: 2.000000
key is: 3 - value is: 3.000000
key is: 1
key is: 2
key is: 3
key is: 4
value is: 1.000000
value is: 2.000000
value is: 3.000000
value is: 4.000000

range itera sobre otras estructuras de datos:

ejemplo

package main
import "fmt"
func main() {
    
    
    //这是我们使用 range 去求一个 slice 的和。使用数组跟这个很类似
    nums := []int{
    
    2, 3, 4}
    sum := 0
    for _, num := range nums {
    
    
        sum += num
    }
    fmt.Println("sum:", sum)
    //在数组上使用 range 将传入索引和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。
    for i, num := range nums {
    
    
        if num == 3 {
    
    
            fmt.Println("index:", i)
        }
    }
    //range 也可以用在 map 的键值对上。
    kvs := map[string]string{
    
    "a": "apple", "b": "banana"}
    for k, v := range kvs {
    
    
        fmt.Printf("%s -> %s\n", k, v)
    }

    //range也可以用来枚举 Unicode 字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。
    for i, c := range "go" {
    
    
        fmt.Println(i, c)
    }
}

El resultado de la ejecución del ejemplo anterior es:

sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111

Resumir

El rango se puede usar en for loop para iterar una matriz, un segmento, un mapa, un canal, una cadena y todo lo relacionado con el recorrido de la salida.
La implementación de for-range es en realidad un bucle for de estilo C.
El uso de índice y valor para recibir el valor de retorno de range provocará una copia de datos

Supongo que te gusta

Origin blog.csdn.net/u011397981/article/details/131740708
Recomendado
Clasificación