亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用golang怎么判斷slice是否相等

發布時間:2021-04-02 15:33:14 來源:億速云 閱讀:183 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關使用golang怎么判斷slice是否相等,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

slice相等的定義

我們選擇最常見的需求,也就是當兩個slice的類型和長度相同,且相等下標的值也是相等的,比如:

a := []int{1, 2, 3}b := []int{1, 2, 3}c := []int{1, 2}d := []int{1, 3, 2}

上述代碼中ab是相等的,c因為長度和a不同所以不相等,d因為元素的排列順序和a不同所以也不相等。

判斷兩個[]byte是否相等

為什么要單獨將[]byte列舉出來呢?

因為標準庫提供了優化的比較方案,不再需要我們造輪子了:

package mainimport (
    "bytes"
    "fmt")func main() {
    a := []byte{0, 1, 3, 2}
    b := []byte{0, 1, 3, 2}
    c := []byte{1, 1, 3, 2}

    fmt.Println(bytes.Equal(a, b))
    fmt.Println(bytes.Equal(a, c))}

使用reflect判斷slice(數組)是否相等

在判斷類型不是[]byte的slice時,我們還可以借助reflect.DeepEqual,它用于深度比較兩個對象包括它們內部包含的元素是否都相等:

func DeepEqual(x, y interface{}) bool

DeepEqual reports whether x and y are “deeply equal,” defined as follows. Two values of identical type are deeply equal if one of the following cases applies. Values of distinct types are never deeply equal.

Slice values are deeply equal when all of the following are true: they are both nil or both non-nil, they have the same length, and either they point to the same initial entry of the same underlying array (that is, &x[0] == &y[0]) or their corresponding elements (up to length) are deeply equal. Note that a non-nil empty slice and a nil slice (for example, []byte{} and []byte(nil)) are not deeply equal.

這段話的意思不難理解,和我們在本文最開始時討論的如何確定slice相等的原則是一樣的,只不過它借助了一點運行時的“黑魔法”。

看例子:

package mainimport (
    "fmt"
    "reflect")func main() {
    a := []int{1, 2, 3, 4}
    b := []int{1, 3, 2, 4}
    c := []int{1, 2, 3, 4}
    fmt.Println(reflect.DeepEqual(a, b))
    fmt.Println(reflect.DeepEqual(a, c))}

手寫判斷

在golang中使用reflect通常需要付出性能代價,如果我們確定了slice的類型,那么自己實現slice的相等判斷相對來說也不是那么麻煩:

func testEq(a, b []int) bool {
    // If one is nil, the other must also be nil.
    if (a == nil) != (b == nil) {
        return false;
    }

    if len(a) != len(b) {
        return false
    }

    for i := range a {
        if a[i] != b[i] {
            return false
        }
    }

    return true}

測試代碼:

package main import "fmt" func main() {    a := []int{1, 2, 3, 4}    b := []int{1, 3, 2, 4}    c := []int{1, 2, 3, 4}    fmt.Println(testEq(a, b))    fmt.Println(testEq(a, c))}

上述就是小編為大家分享的使用golang怎么判斷slice是否相等了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淅川县| 海原县| 桂林市| 库尔勒市| 景洪市| 双牌县| 陈巴尔虎旗| 武邑县| 贵定县| 繁昌县| 桑日县| 固安县| 厦门市| 佛山市| 金平| 行唐县| 宁海县| 泗水县| 巴中市| 金阳县| 开远市| 开江县| 习水县| 巴东县| 阿荣旗| 靖州| 江口县| 河源市| 永嘉县| 安岳县| 沅陵县| 石景山区| 手游| 临朐县| 元江| 铅山县| 泸水县| 泰州市| 太保市| 赣州市| 邵阳市|