从Go中的切片中删除字符串

时间:2015-12-03 15:52:31

标签: string go slice

我有一段字符串,我想删除一个特定字符串。

strings := []string
strings = append(strings, "one")
strings = append(strings, "two")
strings = append(strings, "three")

现在如何从"two"删除字符串strings

2 个答案:

答案 0 :(得分:9)

找到要删除的元素并将其删除,就像使用任何其他切片中的任何元素一样。

查找它是线性搜索。删除是以下slice tricks之一:

a = append(a[:i], a[i+1:]...)
// or
a = a[:i+copy(a[i:], a[i+1:])]

以下是完整的解决方案(在Go Playground上试用):

s := []string{"one", "two", "three"}

// Find and remove "two"
for i, v := range s {
    if v == "two" {
        s = append(s[:i], s[i+1:]...)
        break
    }
}

fmt.Println(s) // Prints [one three]

如果你想把它包装成一个函数:

func remove(s []string, r string) []string {
    for i, v := range s {
        if v == r {
            return append(s[:i], s[i+1:]...)
        }
    }
    return s
}

使用它:

s := []string{"one", "two", "three"}
s = remove(s, "two")
fmt.Println(s) // Prints [one three]

答案 1 :(得分:1)

这是一个删除特定索引处元素的函数:

package main

import "fmt"
import "errors"

func main() {
    strings := []string{}
    strings = append(strings, "one")
    strings = append(strings, "two")
    strings = append(strings, "three")
    strings, err := remove(strings, 1)
    if err != nil {
        fmt.Println("Something went wrong : ", err)
    } else {
        fmt.Println(strings)
    }

}

func remove(s []string, index int) ([]string, error) {
    if index >= len(s) {
        return nil, errors.New("Out of Range Error")
    }
    return append(s[:index], s[index+1:]...), nil
}

Go Playground

上试用