1 回答
TA贡献1911条经验 获得超7个赞
只需使用范围来获取值和索引,而不是使用索引来访问值。
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
}
产出
extracted name: john
new slice without extracted name: [julio pepito carlos]
old slice still intact: [john julio pepito carlos]
参见游乐场示例
在请求更快的版本后进行编辑:使用手册 for 而不是范围循环要快得多。由于您需要创建一个没有元素的新切片,因此有必要在函数内构建一个新切片,这总是需要一些处理能力。
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报