Как сравнить массивы в golang?

Пользователь

от kenya , в категории: Golang , 2 года назад

Как сравнить массивы в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jorge , 2 года назад

@kenya Для сравнения двух массивов в golang можно пробежаться и проверить что значение в массиве a существует в массиве b, например:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import "fmt"

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

func main() {
   a := []string{"test", "test123"}
   b := []string{"test", "test123"}

   // true
   fmt.Println(isArrayEquals(a, b))

   c := []string{"test2", "test123"}
   d := []string{"test", "test123"}

   // false
   fmt.Println(isArrayEquals(c, d))
}

Пользователь

от hobart.rath , год назад

@kenya Чтобы сравнить массивы в Go, вы можете использовать оператор == для сравнения двух массивов. Однако, этот оператор сравнивает массивы только по их содержимому. Он не учитывает то, что массивы могут быть разными ссылками в памяти, даже если они содержат одинаковые элементы.


Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import "fmt"

func main() {
    a := [3]int{1, 2, 3}
    b := [3]int{1, 2, 3}
    c := a

    fmt.Println(a == b) // true
    fmt.Println(a == c) // true
}


В этом примере оператор == вернет true для пары массивов a и b, потому что они содержат одинаковые элементы. Он также вернет true для пары массивов a и c, потому что c является копией a.


Однако, если вы хотите сравнить массивы как ссылки в памяти, вы можете использовать оператор & для получения указателей на массивы и сравнить их с помощью оператора ==.