2016-11-30 203 views
1

從接口切片中刪除「nil」並生成新的接口切片的最佳方法是什麼?Golang從接口切片中刪除nil {}

Slice := []interface{}{1, nil, "string", nil} 

沒有什麼好的在我心中?

+2

字面上_nothing_想到完整的例子嗎? – JimB

+0

我已經遍歷範圍並檢查爲零。 –

回答

4
newSlice := make([]interface{}, 0, len(Slice)) 
for _, item := range Slice { 
    if item != nil { 
     newSlice = append(newSlice, item) 
    } 
} 
+0

啊我的問題是缺少0,而這樣做使() –

+1

@詹姆斯,'使([]接口,0)'的工作方式完全相同,這只是預分配的上限。在大多數代碼中,我可能只是使用'var newSlice [] interface',並且讓append按需分配,因爲它很少重要。 – JimB

+1

此外,如果順序無關緊要,則使用就地過濾器:https://play.golang.org/p/IWBeCs4Cwu – JimB

1

您還可以使用式開關這樣的例子:

slice := []interface{}{1, nil, "string", nil} 
newSlice := make([]interface{}, 0, len(slice)) 

for _, val := range(slice){ 
    switch val.(type) { 
     case string, int: // add your desired types which will fill newSlice 
      newSlice = append(newSlice, val) 
    } 
} 

fmt.Printf("newSlice: %v\tType: %T\n", newSlice, newSlice) 

輸出:

newSlice: [1 string] Type: []interface {} 

你可以看到內The Go Playground