Go语言程序比较两个切片中的元素
在本教程中,我们将学习如何比较两个切片中的元素。在切片中,简单的相等比较是不可能的,因此切片是通过它们的长度和循环中存在的元素来比较的。输出将使用fmt.Println()函数以布尔值的形式打印到控制台。让我们通过一个例子来看看如何执行。
方法一:使用用户自定义函数
在这种方法中,我们将使用外部函数比较两个切片中的元素,在这个函数中,我们将设置一些条件,如果切片满足这些条件,则它们将被认为相等,否则它们将不被认为相等。让我们来看一看,以便更好地理解。
语法
func append(slice, element_1, element_2…, element_N) []T
append函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其添加值的数组,后跟要添加的值。然后,该函数返回包含所有值的最终数组切片。
算法
步骤1 - 创建一个名为main的包,并在程序中导入fmt包。
步骤2 - 创建一个main函数,在其中创建两个字符串类型的切片,并调用名为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
方法二:使用内置函数
在这种方法中,我们将使用reflect.DeepEqual()函数递归地比较两个切片。内置函数简化了我们的工作并缩短了代码。这里的输出将使用fmt.Println()函数打印。让我们来看一看并学习如何解决这个问题。
语法
reflect.DeepEqual()
此函数递归地比较两个值。它遍历并检查每一级相应数据值的相等性。但是,与循环比较相比,此解决方案不太安全。应该谨慎使用反射,并且应该在那些极其重要的场合使用。
func append(slice, element_1, element_2…, element_N) []T
append函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其添加值的数组,后跟要添加的值。然后,该函数返回包含所有值的最终数组切片。
算法
步骤1 - 创建一个名为main的包,并在程序中导入fmt和reflect包。
步骤2 - 创建一个main函数,在这个函数中创建两个要相互比较的字符串类型的切片。
步骤3 - 在第一个案例中,在向切片添加任何新元素之前,使用reflect.DeepEqual()函数将切片作为参数进行比较。
步骤4 - 在第二个案例中,向切片中添加新的字符串,并使用reflect.DeepEqual()函数将切片作为参数进行比较。
步骤5 - 输出将作为布尔值使用fmt.Println()函数打印到控制台。
示例
使用内置函数比较两个切片中的元素的Go语言程序
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()的内置函数。