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

首頁 >後端開發 >Golang >Go:檢查切片中的每個項目是否符合條件

Go:檢查切片中的每個項目是否符合條件

WBOY
WBOY轉載
2024-02-08 21:10:291056瀏覽

Go:檢查切片中的每個項目是否符合條件

php小編子墨為您介紹一個非常實用的Go語言技巧:檢查切片中的每個項目是否符合條件。 Go語言的切片是一種靈活且功能強大的資料結構,但在實際應用中,我們常常需要對切片中的元素進行條件判斷。本文將詳細介紹如何使用Go語言的range和if語句來檢查切片中的每個項目是否符合我們所設定的條件。透過掌握這個技巧,您將能夠更有效率地處理切片數據,提高程式碼的可讀性和可維護性。

問題內容


檢查切片中的每個項目是否滿足某些條件的最優雅的方法是什麼?在我的特定場景中,我有一個位元組:[16]byte。我需要檢查所有位元組是否都是 0。

例如,在 js 中,我會做類似的事情:

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

在 go 中執行此操作最乾淨、最直接的方法是什麼?


解決方法


為了可讀性和靈活性(例如,如果您需要對byte 以外的類型進行操作),您可能會受益於寫一個小的all 通用函數

  • 接受一個切片和該切片的元素類型的謂詞,並且
  • 當且僅當切片的所有元素都滿足謂詞時,才傳回 true

然後您就可以自由地將通用函數與不同的切片和謂詞一起使用。

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
}

(遊樂場)

不過,無需為 all 函數建立函式庫;一點複製勝過一點依賴

以上是Go:檢查切片中的每個項目是否符合條件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除