Golang 切片 使用函数式 删除指定id的元素

27 min read

Go语言切片使用函数式删除指定id的元素,可以使用内置函数filter来实现。

下面是一个示例代码:

package main

import "fmt"

type Item struct {
    id   int
    name string
}

func main() {
    items := []*Item{
        {1, "apple"},
        {2, "banana"},
        {3, "orange"},
    }

    idToDelete := 2
    items = filter(items, func(item *Item) bool {
        return item.id != idToDelete
    })

    fmt.Printf("%+v", items)
}

func filter(items []*Item, predicate func(*Item) bool) []*Item {
    var result []*Item
    for _, item := range items {
        if predicate(item) {
            result = append(result, item)
        }
    }
    return result
}

上面的代码中,首先定义了一个Item结构体表示元素,然后定义了一个filter函数,该函数接受一个切片和一个谓词函数,用于删除满足谓词条件的元素,并返回新的切片。

接着在main函数中,定义了一个包含三个元素的切片items,然后用谓词函数过滤其中id=2的元素,并返回新的切片items

最后输出新的切片items,可以发现已经成功删除了id=2的元素。

运行结果如下:

[{id:1 name:apple} {id:3 name:orange}]