gpt4 book ai didi

list - 如何在golang中迭代相同列表时从列表中删除元素

转载 作者:IT老高 更新时间:2023-10-28 13:10:12 28 4
gpt4 key购买 nike

我是新来的语言。我想在基于 go 语言条件迭代列表时从列表中删除元素。例如,我想从列表中删除重复的元素。代码如下。

package main
import (
"container/list"
"fmt"
)
var sMap map[int]bool
func main() {
l := list.New()
l.PushFront(4)
l.PushFront(5)
l.PushFront(7)
l.PushFront(6)
l.PushFront(5)
l.PushFront(4)
l.PushFront(5)
l.PushFront(7)
l.PushBack(9)
l = removeDuplicate(l)
for e := l.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
func removeDuplicate(l *list.List) *list.List {
sMap = make(map[int]bool)
for e := l.Front(); e != nil; e = e.Next() {
m := e.Value.(int)
fmt.Println("VALUE : ", m)
if sMap[m] == true {
fmt.Println("Deleting ", e.Value)
l.Remove(e)
} else {
fmt.Println("Adding New Entry", e.Value)
sMap[m] = true
}
}
return l
}

上面的代码只遍历列表直到第一次被删除。我试图在遍历同一个列表时删除元素。这就是它不起作用的原因。任何人都可以在 golang 中建议一个列表迭代器吗?

最佳答案

如果 e 从列表中删除,则在下一个循环中调用 e.Next() 将返回 nil。因此,在删除e之前,需要将e.Next()赋值给next。这是通过迭代清除所有元素的示例(在 list_test.go 中)

// Clear all elements by iterating
var next *Element
for e := l.Front(); e != nil; e = next {
next = e.Next()
l.Remove(e)
}

同样的模式可以应用于以下问题;

package main
import (
"container/list"
"fmt"
)
var sMap map[int]bool
func main() {
l := list.New()
l.PushFront(4)
l.PushFront(5)
l.PushFront(7)
l.PushFront(6)
l.PushFront(5)
l.PushFront(4)
l.PushFront(5)
l.PushFront(7)
l.PushBack(9)
l = removeDuplicate(l)
for e := l.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
func removeDuplicate(l *list.List) *list.List {
sMap = make(map[int]bool)
var next *list.Element
for e := l.Front(); e != nil; e = next {
m := e.Value.(int)
next = e.Next()
fmt.Println("VALUE : ", m)
if sMap[m] == true {
fmt.Println("Deleting ", e.Value)
l.Remove(e)
} else {
fmt.Println("Adding New Entry", e.Value)
sMap[m] = true
}
}
return l
}

输出

VALUE :  7
Adding New Entry 7
VALUE : 5
Adding New Entry 5
VALUE : 4
Adding New Entry 4
VALUE : 5
Deleting 5
VALUE : 6
Adding New Entry 6
VALUE : 7
Deleting 7
VALUE : 5
Deleting 5
VALUE : 4
Deleting 4
VALUE : 9
Adding New Entry 9
7
5
4
6
9

关于list - 如何在golang中迭代相同列表时从列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27662614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com