91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

使用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

朝阳市| 抚州市| 龙南县| 永吉县| 尉氏县| 崇左市| 新郑市| 临朐县| 芮城县| 米林县| 汉中市| 青冈县| 滦南县| 合作市| 都江堰市| 明光市| 泽州县| 西乌珠穆沁旗| 搜索| 共和县| 五大连池市| 淄博市| 朝阳区| 衡水市| 龙游县| 龙口市| 广饶县| 昌邑市| 万源市| 中方县| 扶绥县| 遂川县| 巴林左旗| 长春市| 忻州市| 宣威市| 西华县| 健康| 天柱县| 白山市| 延安市|