Cómo puedo correctamente comparar dos matrices en Ir?

Por ejemplo, ¿cómo puedo comparar las dos dimensiones de las matrices con int entradas, o de cualquier otro tipo?

Cómo de profunda es esa comparación?

  • Solo para aclarar, ya que la gente suele cometer ese error – ¿te refieres a rodajas o las matrices? Hay una diferencia en Ir. Si no estás seguro de a qué te refieres, podrías pegar el código de ejemplo de creación de una de estas cosas y lo vamos a averiguar.
  • las matrices no rodajas.
InformationsquelleAutor angry_gopher | 2013-09-01

3 Comentarios

  1. 29

    Para comparar dos matrices el uso de la los operadores de comparación == o !=. Citando desde el link:

    Matriz de valores son comparables si los valores de la matriz tipo de elemento son comparables. Dos valores de matriz son iguales si sus elementos correspondientes son iguales.

    Como un 2D (o ND) de la matriz se ajusta con el requisito anterior, se puede comparar de la misma manera.

    La pregunta «¿Cómo de profunda es esa comparación?» no tiene sentido para las matrices.

    • Nope rodajas sólo puede ser comparado con nil; play.golang.org/p/Kk8osjPm8n
    • Donde ves todos los sectores? Nunca los menciona en la pregunta ni en esta respuesta.
    • eso es cierto. Es sólo que mucha de la gente se confunde porque en Ir []int{1,2,3} es una parte pero [3]int{1,2,3} es una matriz.
  2. 18

    Para «Profundo» de comparación, puede utilizar reflexionar.DeepEqual.

    DeepEqual pruebas para la profundidad de la igualdad. Utiliza normal == igualdad, donde sea posible, pero va a escanear elementos de los arrays, rodajas, mapas, y los campos de estructuras. En los mapas, las llaves están en comparación con ==, pero los elementos profundos de la igualdad. DeepEqual maneja correctamente los tipos recursivos. Las funciones son iguales sólo si ambas son nulas. Un vacío de la rebanada no es igual a cero sector.

    Ejemplo:

    package main
    
    import (
        "bytes"
        "fmt"
        "reflect"
    )
    
    func main() {
        a := []byte{}    //empty slice
        b := []byte(nil) //nil slice
        fmt.Printf("%t\n%t", bytes.Equal(a, b), reflect.DeepEqual(a, b))
    }

    Devuelve:

    verdadero

    falso

    La advertencia es que es lento.

    Zona de juegos infantil

    • No hay limitación adicional de que ambas matrices tienen que tener exactamente el mismo pedido.
    • Eso no es una advertencia, de que es un requisito. Listas no se supone que se comportan como conjuntos.
  3. 6

    Si usted tiene 2 int rodajas/matrices intente esto:

    func IntArrayEquals(a []int, b []int) bool {
        if len(a) != len(b) {
            return false
        }
        for i, v := range a {
            if v != b[i] {
                return false
            }
        }
        return true
    }

    NOTA: esto es para 1D matrices, pero se puede volver a escribir para 2D.

    • gracias. ¿Hay alguna función integrada?
    • bytes.Igual()

Dejar respuesta

Please enter your comment!
Please enter your name here