2016-11-30 3 views
1

インターフェイス{}のスライスから「nil」を削除し、インターフェイス{}の新しいスライスを生成する最適な方法は何ですか?インターフェイスのスライスから除外するゴラン{

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

何も良いことはありませんか?

+2

以内に完全な例を見ることができますが、文字通り心に_nothing_来ますか? – JimB

+0

私はループスルーしてnilをチェックしました。 –

答えて

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

ああ、私の問題はmake()を実行している間0になっていなかった。 –

+1

@James、 'make([] interface、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

関連する問題