Срез 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 () возвращает целочисленное значение, которое представляет, что эти срезы равны или нет, и имеют следующие значения:
- Если результат равен 0, то sliceA == sliceB.
- Если результат -1, то sliceA
- Если результат +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 в байтовый массив