byte===0)/"> Go: Check if each item in a slice satisfies a condition-Golang-php.cn

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

WBOY
Release: 2024-02-08 21:10:29
forward
996 people have browsed it

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
Copy after login

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 thanbyte), you might Would benefit from writing a smallallgeneric function

  • Accepts a slice and a predicate of the slice's element types, and
  • Returnstrueif 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 }
Copy after login

(Playground)

However, there is no need to create a library forallfunctions;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!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!