如何删除切片指定元素

请问golang有没有检索切片判断指定元素是否存在且返回所在位置的函数?golang是如何删除切片指定元素?

只能先for循环,对比切片每个元素是否和指定元素相同,然后再拼接切片么?

var s = []string{"ca", "ab", "ec"}

for k, v := range s {
    if v == "ab" {

        kk := k + 1

        s = append(s[:k], s[kk:]...)
    }
}

上面函数执行需要2.5s, 如果切片很长的话,也是这样操作么?

如果切片中有重复值呢?

有没有像js indexOf() 、 lastIndexOf() 、 slice() 那样的内置函数?

共 1 个回复


yinshuwei

上面这个应该很快的吧

有重复的值只要加一个切片做结果,就可以了

var s = []string{"ca", "ab", "ec", "ca", "ab", "ec", "ca", "ab", "ec"}
index := 0
endIndex := len(s) - 1

var result = make([]string, 0)
for k, v := range s {
    if v == "ab" {
        result = append(result, s[index:k]...)
        index = k + 1
    } else if k == endIndex {
        result = append(result, s[index:endIndex+1]...)
    }
}
# 0