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

Home >Backend Development >Golang >Go: Check if each item in a slice satisfies a condition

Go: Check if each item in a slice satisfies a condition

WBOY
WBOYforward
2024-02-08 21:10:291056browse

Go: Check if each item in a slice satisfies a condition

php editor Zimo introduces you to a very practical Go language technique: check whether each item in the slice meets the conditions. The slice of the Go language is a flexible and powerful data structure, but in practical applications, we often need to perform conditional judgments on the elements in the slice. This article will introduce in detail how to use the range and if statements of the Go language to check whether each item in the slice meets the conditions we set. By mastering this technique, you will be able to process sliced ​​data more efficiently and improve the readability and maintainability of your code.

Question content


What is the most elegant way to check if each item in a slice meets certain conditions? In my particular scenario, I have a byte slice: [16]byte. I need to check if all bytes are 0.

For example, in js, I would do something like:

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

What is the cleanest and most straightforward way to do this in go?


Workaround


For readability and flexibility (for example, if you need to operate on types other than byte), you might Would benefit from writing a small all generic function

  • Accepts a slice and a predicate of the slice's element types, and
  • Returns true if and only if all elements of the slice satisfy the predicate.

You are then free to use the generic function with different slices and predicates.

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
}

(Playground)

However, there is no need to create a library for all functions; A bit of copying is worth a bit of dependency.

The above is the detailed content of Go: Check if each item in a slice satisfies a condition. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete