Golang程序 比较两个片区的元素

Golang程序 比较两个片区的元素

在本教程中,我们将学习如何比较两个片断中的元素。在切片中,简单的等价比较是不可能的,所以要比较切片的长度和循环中存在的元素。在fmt.Println()函数的帮助下,输出将以布尔值的形式打印在控制台。让我们看看如何在一个例子的帮助下执行这个程序。

方法1:使用用户定义的函数

在这个方法中,我们将使用一个外部函数来比较两个切片中的元素,在该函数中,我们将设置一些条件,如果切片满足这些条件,它们将被视为相等,否则它们将被视为不相等。让我们来看看,以获得更好的理解。

语法

func append(slice, element_1, element_2…, element_N) []T

append函数用于向一个数组片断添加值。它需要一些参数。第一个参数是我们希望添加的数组,后面是要添加的值。然后,该函数返回包含所有值的数组的最终片断。

算法

  • 第1步 – 在程序中创建一个包main并导入fmt包。

  • 第2步 – 创建一个主函数,在其中创建两个字符串类型的片断,并以两个片断为参数调用一个名为slice_equality的函数。

  • 第3步 – 创建一个函数slice_equality,并在该函数中检查如果第一个切片的长度不等于第二个切片,则返回false。

  • 第4步 – 在下一个案例中,运行for循环直到str1的范围,并检查str2的元素是否与str1相等,如果不相等则返回false。

  • 第5步–在检查了算法中设置的所有条件后,如果连一次假的都没有返回,就向函数返回真。

  • 第6步 – 使用fmt.Println()函数打印布尔值,这里的ln指的是下一行。

示例

使用自定义函数比较两个片区的元素的Golang程序

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()

这个函数以递归方式比较两个值。它遍历并检查每一级对应的数据值是否相等。然而,与循环中的比较相比,该方案的安全性较低。反映应该谨慎使用,应该在那些最重要的情况下使用。

func append(slice, element_1, element_2…, element_N) []T

append函数用于向一个数组片断添加值。它需要一些参数。第一个参数是我们希望添加的数组,后面是要添加的值。然后,该函数返回包含所有值的数组的最终片断。

算法

  • 第1步 – 创建一个包main,导入fmt并在程序中反映包。
  • 第2步 – 创建一个函数main,并在该函数中创建两个要相互比较的字符串类型的片断。

  • 第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()的内置函数。