请教一个删除slice某个元素的问题

karl_zhao · 2021-03-16 16:50:47 · 2970 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-03-16 16:50:47 的主题,其中的信息可能已经有所发展或是发生改变。

想做一个通用的从slice中delete一个指定的元素,我是这样做的:

func DeleteElementInSlice(sl []interface{}, idx int) []interface{} {

return append(sl[:idx], sl[idx+1:]...)

} 可是我在使用的这个函数时不知道怎么使用了?

下面是我的调用示例,没法编译。

func DeleteOption(optSl []string, oldStr string) []string {

var idx int

for i, v := range optSl {

if v == oldStr {

idx = i

break

}

}

sl := DeleteElementInSlice(optSl, idx)

}

大佬们,指点一下吧


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2970 次点击  
加入收藏 微博
4 回复  |  直到 2021-03-17 17:54:00
liangmanlin
liangmanlin · #1 · 4年之前

这个是泛型的列子,很遗憾go暂时不支持泛型,不考虑性能可以用反射实现,如果对性能敏感,可以使用unsafe包

wuchenghui
wuchenghui · #2 · 4年之前

return呢

yqsgogo
yqsgogo · #3 · 4年之前

小白一个,把interface改成string就可以了,不知道有啥区别 微信图片_20210317171214.png

abuuloou
abuuloou · #4 · 4年之前
package main
import "fmt"
func DeleteElementInSlice(s []interface{},index int) []interface{}{
    return append(s[:index],s[index+1:]...)
}
func DeleteOption(oldS []interface{},oldstr interface{})[]interface{}{
    var idx int
    for i,v:=range oldS{
        if v==oldstr{
            idx=i
            break
        }
    }
    s1:=DeleteElementInSlice(oldS,idx)
    return s1
}
func main(){
    slice:=[]interface{}{"tom","hello","ok","love"}
    var str interface{}="hello"

    fmt.Println(DeleteOption(slice,str))

}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传