Как сравнить два среза байта в Голанге?

Опубликовано: 20 Февраля, 2022

В языке Go фрагмент более мощный, гибкий, удобный, чем массив, и представляет собой легкую структуру данных. Срез представляет собой последовательность переменной длины, в которой хранятся элементы аналогичного типа, вам не разрешается хранить элементы разных типов в одном срезе. В слайсе Go вам разрешено сравнивать два слайса байтового типа друг с другом с помощью функции Compare () . Эта функция возвращает целочисленное значение, которое представляет, что эти срезы равны или нет, и имеют следующие значения:

  • Если результат 0, то slice_1 == slice_2.
  • Если результат -1, то slice_1 <slice_2.
  • Если результат +1, то slice_1> slice_2.

Эта функция определена в пакете байтов, поэтому вам необходимо импортировать пакет байтов в свою программу для доступа к функции сравнения.

Синтаксис:

 func Compare (slice_1, slice_2 [] byte) int

Обсудим эту концепцию на примерах:

Пример 1:

// Go program to illustrate how to
// compare two slices of bytes
package main
  
import (
    "bytes"
    "fmt"
)
  
// Main function
func main() {
  
    // Creating and initializing
    // slices of bytes
    // Using shorthand declaration
  
    slice_1 := []byte{"G", "E", "E", "K", "S"}
    slice_2 := []byte{"G", "E", "e", "K", "S"}
  
    // Comparing slice
    // Using Compare function
    res := bytes.Compare(slice_1, slice_2)
  
    if res == 0 {
        fmt.Println("!..Slices are equal..!")
    } else {
        fmt.Println("!..Slice are not equal..!")
    }
}

Выход:

 ! .. Срезы не равны ..!

Example 2:

// Go program to illustrate how
// to compare two slices of byte
package main
  
import (
    "bytes"
    "fmt"
)
  
func main() {
  
    // Creating and initializing
    // slices of bytes
    // Using shorthand declaration
    slice_1 := []byte{"A", "N", "M", "O", "P", "Q"}
    slice_2 := []byte{"a", "g", "t", "e", "q", "m"}
    slice_3 := []byte{"A", "N", "M", "O", "P", "Q"}
    slice_4 := []byte{"A", "n", "M", "o", "p", "Q"}
  
    // Displaying slices
    fmt.Println("Slice 1: ", slice_1)
    fmt.Println("Slice 2: ", slice_2)
    fmt.Println("Slice 3: ", slice_3)
    fmt.Println("Slice 4: ", slice_4)
  
    // Comparing slices
    // Using Compare function
    res1 := bytes.Compare(slice_1, slice_2)
    res2 := bytes.Compare(slice_1, slice_3)
    res3 := bytes.Compare(slice_1, slice_4)
    res4 := bytes.Compare(slice_2, slice_3)
    res5 := bytes.Compare(slice_2, slice_4)
    res6 := bytes.Compare(slice_2, slice_1)
    res7 := bytes.Compare(slice_3, slice_1)
    res8 := bytes.Compare(slice_3, slice_2)
    res9 := bytes.Compare(slice_3, slice_4)
    res10 := bytes.Compare(slice_4, slice_1)
    res11 := bytes.Compare(slice_4, slice_2)
    res12 := bytes.Compare(slice_4, slice_3)
    res13 := bytes.Compare(slice_4, slice_4)
  
    // Displaying results
    fmt.Println(" Result 1:", res1)
    fmt.Println("Result 2:", res2)
    fmt.Println("Result 3:", res3)
    fmt.Println("Result 4:", res4)
    fmt.Println("Result 5:", res5)
    fmt.Println("Result 6:", res6)
    fmt.Println("Result 7:", res7)
    fmt.Println("Result 8:", res8)
    fmt.Println("Result 9:", res9)
    fmt.Println("Result 10:", res10)
    fmt.Println("Result 11:", res11)
    fmt.Println("Result 12:", res12)
    fmt.Println("Result 13:", res13)
}

Выход:

Срез 1: [65 78 77 79 80 81]
Срез 2: [97 103 116 101 113 109]
Срез 3: [65 78 77 79 80 81]
Срез 4: [65 110 77 111 112 81]

Результат 1: -1
Результат 2: 0
Результат 3: -1
Результат 4: 1
Результат 5: 1
Результат 6: 1
Результат 7: 0
Результат 8: -1
Результат 9: -1
Результат 10: 1
Результат 11: -1
Результат 12: 1
Результат 13: 0