-1
新的去...我寫了一個程序來刪除存儲在列表中的重複整數。當我爲removeDuplicates函數運行以下測試時,出現以下指向此行的錯誤:testString + = strconv.Itoa(e.Value。(int)) in linked_test.go。爲什麼是這個,我該如何解決它?我將整數存儲在testList中,並使用e.Value和typosast以(int)來獲取它們。爲什麼我將「接口轉換:接口是int32」用於將列表整數元素轉換爲字符串?
panic: interface conversion: interface is int32, not int [recovered]
panic: interface conversion: interface is int32, not int
linked_test.go
package linked
import (
"container/list"
"strconv"
"testing"
)
func TestDuplicates(t *testing.T) {
var (
testList = list.New()
exampleList = list.New()
testString string = ""
)
testList.PushBack(1)
testList.PushBack(2)
testList.PushBack(3)
testList.PushBack(2)
exampleList = removeDuplicates(testList)
for e := exampleList.Front(); e.Next() != nil; e = e.Next() {
testString += strconv.Itoa(e.Value.(int))
}
if testString != "123" {
t.Fatalf("removeDuplicates failed")
}
}
linked.go
package linked
import (
"container/list"
"strconv"
"strings"
)
func removeDuplicates(l *list.List) *list.List {
var newList = list.New()
var dupString string = ""
for e := l.Front(); e.Next() != nil; e = e.Next() {
if strings.Index(dupString, strconv.Itoa(e.Value.(int))) == -1 {
dupString += strconv.Itoa(e.Value.(int))
}
}
for _, c := range dupString {
newList.PushBack(c)
}
return newList
}
除了[OneOfOne的答案](HTTP://計算器.com/a/31498076/55504),濫用像這樣的整數字符串表示是愚蠢的,緩慢的,並且不起作用(例如{123,12} - >「123」 - > {1,2,3})。如果你想要快速重複檢測,你需要一個在Go中通常意味着地圖的集合類型。例如。用'var m map [int] bool',然後在循環中用'm [e.Value。(int)] = true',最後用v:= range m {newList.PushBack(v)}' 。 –
感謝戴夫,偉大的一點。我對靜態類型語言是如此的陌生,以至於我時不時地抓着稻草,只是想盡一切辦法來加速學習 – Nona