加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:23:50 所属栏目:大数据 来源:网络整理
导读:我是新来的语言.我希望在根据go语言中的条件迭代列表时从列表中删除元素.例如,我想从列表中删除重复的元素.代码如下. package mainimport ( "container/list" "fmt")var sMap map[int]boolfunc main() { l := list.New() l.PushFront(4) l.PushFront(5) l.Pu
我是新来的语言.我希望在根据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()分配给下一个.以下是通过迭代清除所有元素的示例(在 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 : ",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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读