2014-12-26 21 views
7

में एक ही सूची को फिर से चालू करते समय सूची से तत्व को कैसे हटाएं मैं भाषा जाने के लिए नया हूं। भाषा में किसी शर्त के आधार पर सूची को पुनरावृत्ति करते समय मैं सूची से तत्वों को हटाना चाहता हूं। उदाहरण के लिए मैं सूची से डुप्लिकेट तत्वों को हटाना चाहता हूं। कोड नीचे दिया गया है।गोलांग

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 
} 

उपर्युक्त कोड केवल पहले हटाने तक सूची के माध्यम से पुनरावृत्त करता है। मैं एक ही सूची के माध्यम से तत्व को हटाने के दौरान तत्व को हटाने की कोशिश कर रहा हूं। यही कारण है कि यह काम नहीं कर रहा है। क्या कोई गोलांग में एक सूची इटरेटर सुझा सकता है?

+0

आपका कोड टुकड़ा अधूरा है और संकलन नहीं है। [न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण कैसे बनाएं।] (Http://stackoverflow.com/help/mcve) – peterSO

+1

@ पीटर एसओ - मैंने पूरा कोड जोड़ा – Dany

उत्तर

10

यदि e सूची से हटा दिया गया है तो अगले लूप में e.Next() पर कॉल nil लौटाएगा। इसलिए e हटाने से पहले next पर 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 : ", 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