Go語言切片:len()函數返回7,實際有效元素只有2,如何獲取有效元素數量?

Go語言切片:len()函數返回7,實際有效元素只有2,如何獲取有效元素數量?

go語言切片:容量與有效元素的誤區

Go語言切片是一個動態數組,其容量和長度常常導致混淆。本文分析一個Go語言切片問題:len()函數返回7,但實際有效元素僅為2,并提供解決方案。

問題描述: 一段Go代碼使用make函數初始化切片,隨后用append添加兩個元素。len()返回7,但只有2個元素非空。如何獲取實際有效元素數量(2)?

代碼示例:

立即學習go語言免費學習筆記(深入)”;

package main  import "fmt"  type abc string  func main() {     tslice := make([]abc, 5, 10)     tslice = append(tslice, "測試數組", "第二個值")     fmt.Println("切片長度:", len(tslice)) // 輸出7     // ... 如何獲取有效元素數量? }

問題分析: make([]abc, 5, 10) 創建一個容量為10,長度為5的切片。abc類型為自定義字符串。初始化后,長度為5的切片元素默認為空字符串””。append添加兩個元素后,長度變為7,但前5個元素仍為空字符串。len()返回切片長度,而非有效元素數量。

解決方案: Go語言沒有直接獲取非空元素數量的方法。因為空字符串””類似于零值,判斷元素有效性需根據實際情況。要獲取有效元素數量,必須遍歷切片并判斷每個元素是否為空字符串(或其他零值),然后計數。

以下代碼演示如何遍歷切片并計數非空元素:

package main  import "fmt"  type abc string  func main() {     tslice := make([]abc, 5, 10)     tslice = append(tslice, "測試數組", "第二個值")     count := 0     for _, val := range tslice {         if val != "" {             count++         }     }     fmt.Println("有效元素數量:", count) // 輸出2 }

通過循環遍歷并判斷元素是否為空字符串,我們成功地得到了實際的有效元素數量2。 記住,針對不同數據類型,需要根據其零值進行相應的判斷。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享