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