Heim  >  Artikel  >  Backend-Entwicklung  >  Bestimmen Sie, ob zwei Scheiben in Golang gleich sind

Bestimmen Sie, ob zwei Scheiben in Golang gleich sind

藏色散人
藏色散人nach vorne
2021-04-02 15:13:092250Durchsuche

-Tutorial-Spalte, um Ihnen vorzustellen, ob die beiden Segmente dem Array unter dem Beurteilungswert in Golang entsprechen. Ich hoffe, es wird den Freunden in Not hilfreich sein!

In Golang können wir leicht == verwenden, um zu bestimmen, ob zwei Arrays gleich sind, aber leider gibt es für Slice keine verwandten Operatoren. Wenn zwei Arrays bestimmt werden müssen, wenn die Slices gleich sind , wir können nur eine andere Verknüpfung finden.

Bestimmen Sie, ob zwei Scheiben in Golang gleich sind

Die Definition der Slice-Gleichheit==来判断两个数组(array)是否相等,但遗憾的是slice并没有相关的运算符,当需要判断两个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

Wir wählen die häufigste Anforderung, dh wenn die Art und Länge der beiden Slices gleich sind und auch die Werte der gleichen Indizes gleich sind, wie zum Beispiel:
func DeepEqual(x, y interface{}) bool

a im obigen Code und b sind gleich, c ist nicht gleich, da sich die Länge von a unterscheidet code> und <code>d sind nicht gleich, da sich die Anordnungsreihenfolge der Elemente von a unterscheidet und sie daher nicht gleich sind.

Bestimmen Sie, ob zwei []Bytes gleich sind

Warum müssen wir []Byte separat auflisten?

Da die Standardbibliothek ein optimiertes Vergleichsschema bietet, müssen wir das Rad nicht mehr neu erfinden:

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

Verwenden Sie Reflect, um festzustellen, ob Slices (Arrays) gleich sind

Bei der Beurteilung von Slices, deren Typ nicht []Byte ist, Wir können auch mit reflect.DeepEqual zwei Objekte einschließlich der darin enthaltenen Elemente gründlich vergleichen, um zu sehen, ob sie gleich sind:

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}
🎜DeepEqual meldet, ob x und y „zutiefst gleich“ sind „Zwei Werte identischen Typs sind zutiefst gleich, wenn einer der folgenden Fälle zutrifft. Werte unterschiedlicher Typen sind niemals zutiefst gleich sind wahr: Sie sind beide null oder beide ungleich null, sie haben die gleiche Länge und zeigen entweder auf denselben Anfangseintrag desselben zugrunde liegenden Arrays (d. h. &x[0] == &y[0]) oder auf ihre Entsprechende Elemente (bis zur Länge) sind zutiefst gleich. Beachten Sie, dass ein leeres Nicht-Null-Slice und ein Null-Slice (z. B. []byte{} und []byte(nil)) nicht zutiefst gleich sind.🎜🎜🎜Die Bedeutung Dieser Abschnitt ist nicht schwer zu verstehen und stimmt mit dem überein, was wir am Ende dieses Artikels besprochen haben. Das zu Beginn besprochene Prinzip zur Bestimmung der Slice-Gleichheit ist dasselbe, verwendet jedoch ein wenig „schwarze Magie“ zur Laufzeit ". 🎜🎜Sehen Sie sich das Beispiel an: 🎜
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))}
🎜🎜🎜Handschriftliche Beurteilung🎜🎜Die Verwendung von Reflect in Golang erfordert normalerweise einen Leistungsaufwand. Wenn wir den Typ des Slice bestimmen, ist es relativ nicht so mühsam, die Gleichheitsbeurteilung des Slice selbst umzusetzen : 🎜rrreee 🎜Testcode: 🎜rrreee

Das obige ist der detaillierte Inhalt vonBestimmen Sie, ob zwei Scheiben in Golang gleich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen