Как сравнить два фрагмента в Голанге с примером

Срез Golang более мощный, гибкий, удобный, чем массив, и представляет собой легкую структуру данных. Срез представляет собой последовательность переменной длины, в которой хранятся элементы аналогичного типа, вам не разрешается хранить элементы разных типов в одном срезе.

Сравнить два фрагмента в Golang

Golang bytes Compare () — это встроенная функция, которая возвращает целое число, сравнивая лексикографически двухбайтовые срезы. Конечным результатом будет 0, если a == b, -1, если a b. Аргумент nil эквивалентен пустому фрагменту.

Синтаксис

 func Compare (a, b [] byte) int 

Пример

//hello.gopackage mainimport ("bytes" "fmt")//Основная функцияfunc main () {//Создание и инициализация//срезов байтов//Использование сокращенных объявлений liceA: = [] byte {'M', 'I', 'L', 'L', 'I', 'E'} sliceB: = [] byte  {'B', 'O', 'B', 'B', 'Y'}//Сравнение среза//Использование функции сравнения res: = bytes.Compare (sliceA, sliceB) if res == 0 {fmt.Println (  «Срезы равны»)} else {fmt.Println («Срезы не равны»)}} 

Вывод

  go run hello.goSlices не равны 

В приведенном выше примере sliceA и sliceB не равны. Таким образом, он вернет Срезы не равны.

Давайте проверим сценарий, в котором байты срезов равны.

//hello.gopackage mainimport ("bytes" "fmt")//Основная функцияfunc main () {//Создание и инициализация//срезов байтов//Использование  сокращенные объявления sliceA: = [] byte {'B', 'O', 'B', 'B', 'Y'} sliceB: = [] byte {'B', 'O', 'B', 'B'  , 'Y'}//Сравнение среза//Использование функции сравненияres: = bytes.Compare (sliceA, sliceB) if res == 0 {fmt.Println ("Срезы равны")} else {fmt.Println ("Срезы равны  не равно ")}} 

Вывод

 go run hello.goSlices are equal 

Проверка с учетом регистра в функции byte [] Compare ()

Если значения обоих byte [] одинаковы, но различаются чувствительностью к регистру, тогда он вернет false. И функция byte [] Compare () вернет, что срезы не равны.

//hello.gopackage mainimport ("bytes" "fmt")//Main functionfunc main () {//Создание  и инициализация//фрагментов байтов//Использование сокращенных объявлений liceA: = [] byte {'B', 'o', 'b', 'b', 'Y'} sliceB: = [] byte {'B', '  O ',' B ',' B ',' Y '}//Сравнение среза//Использование функции сравнения res: = bytes.Compare (sliceA, sliceB) if res == 0 {fmt.Println ("Срезы равны")  } else {fmt.Println ("Срезы не равны")}} 

Вывод

 иди, беги, привет. goSlices не равны 

Если оба значения byte [] одинаковы, но имеют разный регистр, то функция Compare () не будет одинаковыми.

Сравните два среза, используя байты Голанга.Equal (x, y)

Golang bytes.Equal () — это встроенная функция, которая сообщает, имеют ли x и y одинаковую длину и содержат ли одинаковые байты. Аргумент nil эквивалентен пустому фрагменту.

Синтаксис

 func Equal (x, y [] byte) bool 

Пример

См. следующий код.

//hello.gopackage mainimport ("bytes  "" fmt ")//Основная функцияfunc main () {//Создание и инициализация//срезов байтов//Использование сокращенных объявлений sliceA: = [] byte (" Millie ") sliceB: = [] byte (" milLiE ")//Сравнение среза//Использование равных функцийres: = bytes.Equal (sliceA, sliceB) if res {fmt.Println ("Срезы равны")} else {fmt.Println ("Срезы не равны")}} 

Вывод

 go run hello.goSlices не равны 

В приведенном выше коде оба байта имеют те же значения и длина, но разные регистры символов; поэтому они не совпадают.

Давайте рассмотрим сценарий, в котором все одинаково.

//hello.gopackage mainimport ("bytes" "fmt")//Main functionfunc main () {//Создание и инициализация//срезов байтов//Использование сокращенных объявлений liceA: = [] byte ("  Millie ") sliceB: = [] byte (" Millie ")//Сравнение среза//Использование Equal functionres: = bytes.Equal (sliceA, sliceB) if res {fmt.Println (" Slices are equal ")} else {fmt  .Println ("Срезы не равны")}} 

Вывод

 go run hello.goSlices равны 

Рекурсивное сравнение для байтовых срезов

Функция Golang DeepEqual из пакета отражения, используемого для проверки x и y на «глубокое равенство». Это относится к значениям массива, которые полностью равны, когда их соответствующие элементы полностью равны.

Значения структуры полностью равны, если их соответствующие поля, как экспортированные, так и неэкспортированные, полностью равны.

Давайте возьмем целочисленный срез в следующем примере и проверим, оба ли среза равны или нет.

//hello.gopackage mainimport ("fmt" "reflection")//Main functionfunc main () {//Создание и инициализация//срезов байтов//Использование сокращений  декларацииliceA: = [] int {1, 2, 3, 11} sliceB: = [] int {1, 2, 3, 4}, если отражать.DeepEqual (sliceA, sliceB) {fmt.Println ("Срезы равны")  } else {fmt.Println ("Срезы не равны")}} 

Вывод

 go run hello.goSlices are  не равно 

В приведенном выше коде мы взяли два целочисленных среза: sliceA и sliceB.

Оба среза имеют разные значения, поэтому функция Golang DeepEqual () возвращает false.

Давайте возьмем одинаковые значения для обоих срезов и посмотрим на результат.

//hello.gopackage mainimport ("fmt" "reflection")//Main functionfunc main () {//Создание и инициализация//срезов байтов//Использование сокращенных объявленийliceA: = []  int {11, 21, 18, 19} sliceB: = [] int {11, 21, 18, 19}, если отражать.DeepEqual (sliceA, sliceB) {fmt.Println ("Срезы равны")} else {fmt.  Println ("Срезы не равны")}} 

Вывод

 go run hello.goSlices равны 

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

  1. Если результат равен 0, то sliceA == sliceB.
  2. Если результат -1, то sliceA
  3. Если результат +1, то sliceA> sliceB.

Функция Golang Equal (a, b) сообщает, имеют ли sliceA и sliceB одинаковые длины и одинаковые байты. Аргумент nil эквивалентен пустому срезу.

Функция Golang reflection.DeepEqual (a, b interface {}) сообщает, являются ли a и b « глубоко равными , ”Определяется следующим образом.

Значения срезов полностью равны, если выполняются все следующие условия: они оба равны нулю или оба не равны нулю, они имеют одинаковую длину, и либо они указывают на одна и та же начальная запись одного и того же базового массива (то есть & x [0] == & y [0]) или их соответствующие элементы (до длины) глубоко равны. Обратите внимание, что пустой фрагмент, отличный от nil, и пустой фрагмент (например, [] byte {} и [] byte (nil)) не полностью равны.

Наконец, сравните два фрагмента в Golang На этом учебное пособие закончено.

См. Также

Golang Serialize JSON String

Сравните два строки в Golang

Строка Golang в байтовый массив

Оцените статью
nanomode.ru
Добавить комментарий