byte===0)/"/> byte===0)/">

Heim >Backend-Entwicklung >Golang >Go: Überprüfen Sie, ob jedes Element in einem Slice eine Bedingung erfüllt

Go: Überprüfen Sie, ob jedes Element in einem Slice eine Bedingung erfüllt

WBOY
WBOYnach vorne
2024-02-08 21:10:291056Durchsuche

Go: Überprüfen Sie, ob jedes Element in einem Slice eine Bedingung erfüllt

php-Editor Zimo führt Sie in eine sehr praktische Go-Sprachtechnik ein: Überprüfen Sie, ob jedes Element im Slice die Bedingungen erfüllt. Der Slice der Go-Sprache ist eine flexible und leistungsstarke Datenstruktur. In praktischen Anwendungen müssen wir jedoch häufig bedingte Beurteilungen der Elemente im Slice durchführen. In diesem Artikel wird detailliert beschrieben, wie Sie mithilfe der Range- und If-Anweisungen der Go-Sprache überprüfen, ob jedes Element im Slice die von uns festgelegten Bedingungen erfüllt. Wenn Sie diese Technik beherrschen, können Sie segmentierte Daten effizienter verarbeiten und die Lesbarkeit und Wartbarkeit Ihres Codes verbessern.

Frageninhalt


Was ist der eleganteste Weg, um zu überprüfen, ob jedes Element in einem Slice bestimmte Bedingungen erfüllt? In meinem speziellen Szenario habe ich ein Byte-Slice: [16]Byte. Ich muss überprüfen, ob alle Bytes 0 sind.

Zum Beispiel würde ich in js so etwas tun wie:

const uint8Array = new Uint8Array([0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0])//Can be thought of as an array of "bytes"

const isEmpty = uint8Array.every(byte=>byte === 0)//Check that every "byte" is zero

console.log(isEmpty)//false

Was ist der sauberste und einfachste Weg, dies in Go zu tun?


Workaround


Für Lesbarkeit und Flexibilität (z. B. wenn Sie byte 以外的类型进行操作),您可能会受益于编写一个小的 all generische Funktionen

verwenden müssen).
  • nimmt ein Slice und ein Prädikat des Elementtyps des Slice und
  • Gibt true genau dann zurück, wenn alle Elemente des Slice das Prädikat erfüllen.

Sie können die generische Funktion dann frei mit verschiedenen Slices und Prädikaten verwenden.

package main

import "fmt"

func main() {
    bs := []byte{15: 1} // slice of 16 bytes, all but the last one of which are zero
    isZero := func(b byte) bool { return b == 0 }
    fmt.Println(All(bs, isZero)) // false
}

func All[T any](ts []T, pred func(T) bool) bool {
    for _, t := range ts {
        if !pred(t) {
            return false
        }
    }
    return true
}

(Spielplatz)

Keine Notwendigkeit, eine Bibliothek für all Funktionen zu erstellen; Ein bisschen Kopieren ist ein bisschen Abhängigkeit wert.

Das obige ist der detaillierte Inhalt vonGo: Überprüfen Sie, ob jedes Element in einem Slice eine Bedingung erfüllt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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