Golang中切片做函数的参数删除切片中的元素
工作中碰到的问题:
如何删除切片中的数据,网上大多数都是直接对切片进行操作,如果切片作为函数参数,在
函数中删除元素, 如果不不注意的话则会出现令人意外的情况
代码如下:
// 需求是:
a := map[int]int{22: 3, 11: 4, 33: 5, 44: 6}
b := []int{11, 22}
删除b中与a中key相等的元素
package main
import (
"fmt"
"reflect"
"sort"
)
func main1() {
a := map[int]int{22: 3, 11: 4, 33: 5, 44: 6}
b := []int{11, 22}
//被替换的部分//begain//
for k, v := range b {
if v == 11 || v == 22 {
fmt.Printf("k:%d\n", k)
b = append(b[:k], b[k+1:]...)
fmt.Printf("b:%+v\n", b)
}
}
//被替换的部分//end//
fmt.Println("out range")
}
输出的结果如下:
错误的原因是: 切片b中的元素已经删掉了,但k的值依然会+1, 导致超出了界限
//被替换的部分//begain//
fmt.Printf("before b is %+v\n", b)
for k, _ := range a {
for i, v := range b {
if v == k {
fmt.Printf("i:%d\n", i)
b = appen