遍历值为结构体类型的Map并append到切片类型的结构体中

本文介绍了一个使用Golang实现的简单示例,展示了如何定义结构体、初始化结构体实例并将其存储到映射中,最后遍历映射并将结构体数据输出。这个过程涉及Golang的基本语法及数据结构操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package main

import "fmt"

type NotknownType struct {
	S1 string
	S2 string
	S3 string
}




func main() {
	a1 :=NotknownType{S3: "nnn",S2: "bbb",S1: "ccc"}
	a2 :=NotknownType{S3: "nnn",S2: "bbb",S1: "ccc"}
	a3 :=NotknownType{S3: "nnn",S2: "bbb",S1: "ccc"}
	mapN :=make(map[string]NotknownType)
	mapN["c1"] =a1
	mapN["c2"] =a2
	mapN["c3"] =a3
	//fmt.Print("mapN\n",mapN)
	var dd []NotknownType

	for _,item :=range mapN{
		ee:= NotknownType{}
		ee.S1=item.S1
		ee.S2=item.S2
		ee.S3=item.S3
		dd =append(dd,ee)
	}
	fmt.Println("ddddddd",dd)
	for k,v :=range dd{
		fmt.Println("kkkkkk",k)
		fmt.Println("vvvvvv",v)
	}
	

}

未完待续~

可以按照以下步骤实现: 1. 定义一个结构体来表示原始数据和去重后的数据: ```go type Data struct { MD5 string FoundTime int Status int } type UniqueData struct { MD5 string FoundTime int Status int } ``` 2. 定义一个方法来去重和更新状态: ```go func DeduplicateAndMergeStatus(originalData []Data) []UniqueData { // 定义用于去重的 map,以 md5 为 key uniqueData := make(map[string]Data) // 遍历原始数据切片,将没有出现过的 md5 添加到去重 map 中 for _, d := range originalData { if _, ok := uniqueData[d.MD5]; !ok { uniqueData[d.MD5] = d } else { // 如果 md5 已经出现过,则根据要求更新状态 if uniqueData[d.MD5].Status != d.Status { if d.FoundTime > uniqueData[d.MD5].FoundTime { uniqueData[d.MD5].Status = d.Status } } } } // 将去重后的结果加入新的切片 var updatedData []UniqueData for _, d := range uniqueData { updatedData = append(updatedData, UniqueData{ MD5: d.MD5, FoundTime: d.FoundTime, Status: d.Status, }) } return updatedData } ``` 3. 调用方法进行测试: ```go func main() { originalData := []Data{ {MD5: "md5_1", FoundTime: 1, Status: 1}, {MD5: "md5_2", FoundTime: 2, Status: 2}, {MD5: "md5_1", FoundTime: 3, Status: 2}, {MD5: "md5_3", FoundTime: 4, Status: 3}, {MD5: "md5_2", FoundTime: 5, Status: 1}, } updatedData := DeduplicateAndMergeStatus(originalData) fmt.Println(updatedData) } ``` 输出结果: ``` [{md5_1 3 2} {md5_2 5 2} {md5_3 4 3}] ``` 可以看到,去重和状态更新成功,且新的切片中包含了去重且更新后的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值