Golang中切片做函数的参数删除切片中的元素

Golang 中如何以函数的方式删除切片中的数据工作中碰到的问题:如何删除切片中的数据,网上大多数都是直接对切片进行操作,如果切片作为函数参数,在函数中删除元素, 如果不不注意的话则会出现令人意外的情况代码如下:// 需求是:a := map[int]int{22: 3, 11: 4, 33: 5, 44: 6}b := []int{11, 22}删除b中与a中key相等的元素p...
摘要由CSDN通过智能技术生成

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值