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

WBOY
Freigeben: 2024-02-08 21:10:29
nach vorne
1008 Leute haben es durchsucht

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
Nach dem Login kopieren

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
}
Nach dem Login kopieren

(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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!