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()的內建函式。

更新於:2023年1月17日

3K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告