这期内容当中小编将会给大家带来有关使用golang怎么判断块是否相等,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
片相等的定义
我们选择最常见的需求,也就是当两个切片的类型和长度相同,且相等下标的值也是相等的,比如:
a :=, int [] {1,, 2,, 3} b :=, int [] {1,, 2,, 3} c :=, int [] {1,, 2} d :=, int [] {1,, 3,, 2}
上述代码中<代码> 代码>和<代码> b> 代码是相等的,<代码> c> 代码因为长度和<代码> 代码>不同所以不相等,<代码> d 代码>因为元素的排列顺序和<代码> 代码>不同所以也不相等。
判断两个[]字节是否相等
为什么要单独将[]字节列举出来呢?
因为标准库提供了优化的比较方案,不再需要我们造轮子了:
package mainimport ( ,,,“bytes" ,,,“fmt") func 主要(),{ ,,,a :=,[]字节{0,,1,,3,,2} ,,,b :=,[]字节{0,,1,,3,,2} ,,,c :=,[]字节{1,,1,,3,,2} ,,,fmt.Println (bytes.Equal (a, b)) ,,,fmt.Println (bytes.Equal (a, c))}
使用反映判断块(数组)是否相等
在判断类型不是[]字节的块时,我们还可以借助<代码>反映。DeepEqual> 代码,它用于深度比较两个对象包括它们内部包含的元素是否都相等:
func DeepEqual (x), y 界面{}),bool
DeepEqual报告是否x和y是“深度相同的情况下,”定义如下。两个值相同的类型非常平等如果> package mainimport ( ,,,“fmt" ,,,“reflect") func 主要(),{ ,,,a :=, int [] {1,, 2,, 3,, 4} ,,,b :=, int [] {1,, 3,, 2,, 4} ,,,c :=, int [] {1,, 2,, 3,, 4} ,,,fmt.Println (reflect.DeepEqual (a, b)) ,,,fmt.Println (reflect.DeepEqual (a, c))}
手写判断
在golang中使用反映通常需要付出性能代价,如果我们确定了切片的类型,那么自己实现切的相等判断相对来说也不是那么麻烦:
func testEq (a, b int []), bool { ,,,//,If one is nil,,, other must also be 零。 ,,,if (a ==, nil), !=, (b ==, nil), { ,,,,,,,return 假; ,,,} ,,,if len (a), !=, len (b), { ,,,,,,,return 错误的 ,,,} ,,,for 小姐::=,range a { ,,,,,,,if [我],!=,b[我],{ ,,,,,,,,,,,return 错误的 ,,,,,,,} ,,,} ,,,return 真正}测试代码:
package main import “fmt", func 主要(),{,,,a :=, int [] {1,, 2,, 3,, 4},,,, b :=, int [] {1,, 3,, 2,, 4},,,, c :=, int [] {1,, 2,, 3,, 4},,,, fmt.Println (testEq (a, b)),,,, fmt.Println (testEq (a, c))}上述就是小编为大家分享的使用golang怎么判断块是否相等了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
使用golang怎么判断块是否相等