2012-10-10 52 views
1

我需要將字符串數組轉換爲字節數組數組。此代碼有效,但重複的append似乎令我厭惡。有沒有更好的辦法?將字符串數組轉換爲字節數組數組的方式

input := []string{"foo", "bar"} 
output := [][]byte{} 
for _, str := range input { 
    output = append(output, []byte(str)) 
} 
fmt.Println(output) // [[102 111 111] [98 97 114]] 

回答

7

無論什麼時候,你需要創建一個新的[][]byte和環比[]string。我會避免通過使用下面的代碼來使用append,但它實際上都是一個風格問題。你的代碼是完全正確的。

input := []string{"foo", "bar"} 
output := make([][]byte, len(input)) 
for i, v := range input { 
    output[i] = []byte(v) 
} 
fmt.Println(output) // [[102 111 111] [98 97 114]] 
+0

難道它不僅僅是一個風格問題? OP的代碼將根據輸入的大小多次ping分配器。你將會要求一個記憶並且完成它。 (當然,OP可以使用'make([] [] byte,0,len(input))'而不是複合文字...) – BurntSushi5

+0

是的,如果他按照他的方式分配了幾個時間。但是,由於字符串非常小,因此不太可能產生很大的差異。你是正確的,使用make()並設置一個理智的上限會減少分配的數量,就像我的例子一樣。 –

+0

同意,這就是我不喜歡append()的重複調用。 –

相關問題