Golang 用于比较两个切片中的元素
在本教程中,我们将学习如何比较两个切片中的元素。在切片中,简单的相等比较是不可能的,因此通过比较它们的长度和循环中出现的元素来比较切片。输出将以布尔值的形式打印在控制台上,借助于fmt.Println()函数的帮助。让我们看一个示例来执行这个过程。
方法1:使用自定义函数
在这种方法中,我们将使用一个外部函数来比较两个切片中的元素,在该函数中,我们将设置一些条件,如果切片满足这些条件,它们将被认为是相等的,否则它们将被认为是不相等的。让我们看一个示例来更好地理解。
语法
func append(slice, element_1, element_2…, element_N) []T
append函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其添加值的数组,其后是要添加的值。该函数将返回包含所有值的最终数组切片。
步骤
- 步骤1 - 在程序中创建一个名为main的包并导入fmt包。
-
步骤2 - 创建一个名为main的函数,在其中创建两个类型为string的切片,并调用一个名为slice_equality的函数,并将这两个切片作为参数传递。
-
步骤3 - 创建一个名为slice_equality的函数,在该函数中检查第一个切片的长度是否不等于第二个切片的长度,如果不相等,则返回false。
-
步骤4 - 在下一个情况下,使用for循环遍历str1的范围,并检查str2的元素是否等于str1,如果它们不相等,则返回false。
-
步骤5 - 在检查算法中设置的所有条件后,如果没有一个false被返回,就返回true给函数。
-
步骤6 - 使用fmt.Println()函数打印布尔值,其中ln表示换行符。
示例
使用自定义函数比较两个切片中的元素的Go语言程序
package main
import "fmt"
func slice_equality(str1, str2 []string) bool {
if len(str1) != len(str2) {
return false
}
for i, str := range str1 {
if str != str2[i] {
return false
}
}
return true // return true if the slices are equal
}
func main() {
str1 := []string{"Goa", "Gujarat"} // create slice1
str2 := []string{"Goa", "Gujarat"} // create sice2
fmt.Println("The slices are equal or not before adding any element:")
fmt.Println(slice_equality(str1, str2)) // printing slice equality before adding any element
str2 = append(str2, "Mumbai")
fmt.Println("The slices are equal or not after adding another element:")
fmt.Println(slice_equality(str1, str2)) // printing slice equality after adding extra element
}
输出
The slices are equal or not before adding any element:
true
The slices are equal or not after adding another element:
false
方法2:使用内置函数
在这个方法中,我们将使用reflect.DeepEqual()函数递归地比较两个切片。内置函数简化了我们的工作并缩短了代码。这里的输出将使用fmt.Println()函数打印出来。让我们来看一下并学习如何解决这个问题。
语法
reflect.DeepEqual()
此函数递归地比较两个值。它遍历并检查每个层级上相应的数据值是否相等。然而,与循环中的比较相比,该解决方案不够安全。应谨慎使用Reflect,并且应在最重要的情况下使用。
func append(slice, element_1, element_2…, element_N) []T
append()函数用于向数组片段中添加值。它接受多个参数。第一个参数是我们要向其添加值的数组,后面是要添加的值。该函数然后返回包含所有值的最终数组片段。
步骤
- 步骤1 - 在程序中创建一个包main,并导入fmt和reflect包。
-
步骤2 - 创建一个main函数,在该函数中创建两个类型为string的切片,它们将被相互比较。
-
步骤3 - 在第一种情况下,在切片中添加任何新元素之前,使用reflect.DeepEqual()函数将切片与切片作为参数进行比较。
-
步骤4 - 在第二种情况下,在切片中添加新字符串,然后使用reflect.DeepEqual()函数将切片与切片作为参数进行比较。
-
步骤5 - 使用fmt.Prinln()函数在控制台上将结果打印为布尔值。
示例
使用内置函数比较两个切片中的元素的Golang程序
package main
import (
"fmt"
"reflect"
)
func main() {
str1 := []string{"Goa", "Gujarat"} // create slices
str2 := []string{"Goa", "Gujarat"}
fmt.Println("The strings are equal or not before adding any element:")
fmt.Println(reflect.DeepEqual(str1, str2)) // print slice equality before adding any element
str2 = append(str2, "Mumbai")
fmt.Println("The strings are equal or not after adding any element:")
fmt.Println(reflect.DeepEqual(str1, str2)) //printing slice equality after adding extra element
}
输出
The strings are equal or not before adding any element:
true
The strings are equal or not after adding any element:
false
结论
在本教程中,我们使用了两种方法来执行比较切片的程序。在第一种方法中,我们使用了自定义函数和一些条件,在第二种方法中,我们使用了一个名为reflect.DeepEqual()的内置函数。
极客笔记