-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