3 回答
TA貢獻1864條經驗 獲得超2個贊
Go 切片無法做到這一點,但該append()函數會在追加元素成為O (1) 分攤操作的情況下增大切片:
func listFile() []string {
// make a slice of length 0
list := make([]string, 0)
files, _ := ioutil.ReadDir("content")
for _, f := range files {
// append grows list as needed
list = append(list, f.Name())
}
return list
}
TA貢獻1982條經驗 獲得超2個贊
要從 的切片生成名稱的切片FileInfo,您不需要像 Java 那樣的任何東西ArrayList。
ioutil.ReadDir()返回一個切片FileInfo,您可以使用內置len函數查詢其長度:
count := len(files)
所以你可以創建一個數組或切片能夠保存這個數量的名稱:
func listFile() []string {
files, _ := ioutil.ReadDir("content")
list := make([]string, len(files))
for i, f := range files {
list[i] = f.Name()
}
return list
}
TA貢獻1757條經驗 獲得超7個贊
是的,您可以創建一個空切片并使用append. 如果您或多或少知道您期望的平均大小,您可以為它保留一些空間,就像在 Java 的 ArrayList 中一樣。這將防止在切片增長時重新分配底層數據。
//make an empty slice with 20 reserved items to avoid
list := make([]string, 0, 20)reallocation
// now we just append to it. The underlying data is not copied
list = append(list, "foo") // add to it
- 3 回答
- 0 關注
- 239 瀏覽
添加回答
舉報
