1 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
只需使用范圍來獲取值和索引,而不是使用索引來訪問值。
package main
import (
"fmt"
)
func main() {
var names = []string{"john", "julio", "pepito", "carlos"}
name, newNames, _ := getMe("john", names)
fmt.Println("extracted name:\t\t\t\t", name)
fmt.Println("new slice without extracted name:\t", newNames)
fmt.Println("old slice still intact:\t\t\t", names)
}
func getMe(me string, names []string) (string, []string, bool) {
var newSlice []string
for i := 0; i < len(names); i++ {
if names[i] == me {
newSlice = append(newSlice, names[:i]...)
newSlice = append(newSlice, names[i+1:]...)
return names[i], newSlice, true
}
}
return "", nil, false
}
產(chǎn)出
extracted name: john
new slice without extracted name: [julio pepito carlos]
old slice still intact: [john julio pepito carlos]
參見游樂場示例
在請求更快的版本后進(jìn)行編輯:使用手冊 for 而不是范圍循環(huán)要快得多。由于您需要?jiǎng)?chuàng)建一個(gè)沒有元素的新切片,因此有必要在函數(shù)內(nèi)構(gòu)建一個(gè)新切片,這總是需要一些處理能力。
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)