如何解决如何从结构片中删除重复项?
我有一个这样的结构:
type structData struct {
dataName string
dataNum int
}
我已经用它们创建了一个切片,像这样:
dataSlice := []*structData{}
我有一个填充dataName
字符串的循环,在此之后,我希望检查结构片并删除重复项。
我之所以特别提到它是因为当前dataNum
为0。所以,我不想检查结构体中的字符串是否相同,因此可以很好地检查整个结构体是否相等(如果可以的话) ,否则我也可以检查dataName
字符串中的重复项,我只是不知道在设计上看起来会更好)。
我的结构切片的示例输出:
&{dataname1 0}
&{dataname1 0}
&{dataname2 0}
&{dataname2 0}
我希望它看起来像什么
&{dataname1 0}
&{dataname2 0}
解决方法
您可以使用映射来检查重复项,其中结构是映射的键。
package main
import (
"fmt"
)
type structData struct {
dataName string
dataNum int
}
func (d *structData) String() string {
return fmt.Sprintf("(%s,%d)",d.dataName,d.dataNum)
}
func main() {
dataSlice := []*structData{
{"dataname1",0},{"dataname1",{"dataname2",}
m := map[structData]struct{}{}
dataSlice2 := []*structData{}
for _,d := range dataSlice {
if _,ok := m[*d]; !ok {
dataSlice2 = append(dataSlice2,d)
m[*d] = struct{}{}
}
}
fmt.Printf("%v\n",dataSlice)
fmt.Printf("%v\n",dataSlice2)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。