首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-08 21:10:29
轉載
1031 人瀏覽過

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
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!