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