loops - 从结构片段中删除具有重复字段值的结构
问题描述
我有一片结构,每个结构都有两个字段。如果仅在第一个字段中存在重复值,我想从切片中删除一个结构。我尝试在循环、映射和排序中使用循环,但我无法弄清楚。
如果两个字段与另一个结构具有相同的值,我最接近的是从切片中删除一个结构,但如果第一个字段与切片中的另一个结构具有相同的值,我需要删除它。
当结构中的所有字段都具有相同的值时,网上有很多这样的例子,但我没有找到任何我正在描述的情况。
我正在处理的实际程序要复杂得多,它需要我使用一片结构。
我在下面做了一个简化的例子,它触及了问题的核心。
它输出[{one 1} {one 2} {five 5}]
所需的输出是[{one 1} {five 5}]
预先感谢您的帮助。
import "fmt"
type myKey struct {
key string
num int
}
type myKeysList []myKey
func remDupKeys(m myKeysList) myKeysList {
keys := make(map[myKey]bool)
list := myKeysList{}
for _, entry := range m {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
func main() {
one := myKey{"one", 1}
two := myKey{"one", 1}
three := myKey{"one", 2}
four := myKey{"one", 1}
five := myKey{"five", 5}
myKeysList := myKeysList{one, two, three, four, five}
fmt.Println(myKeysList)
uList := remDupKeys(myKeysList)
fmt.Println(uList)
}
解决方案
问题中的基本思想是正确的:在地图中记录访问过的值并跳过地图中已经存在的值。
要基于结构中的单个字段删除重复项,请使用该字段作为映射键:
func remDupKeys(m myKeysList) myKeysList {
keys := make(map[string]bool)
list := myKeysList{}
for _, entry := range m {
if _, ok := keys[entry.key]; !ok {
keys[entry.key] = true
list = append(list, entry)
}
}
return list
}
推荐阅读
- ios - 在拆分视图(多任务处理)时在 iOS Cordova 应用程序中打开键盘会移动视图端口
- r - 如何在 RMarkdown 文档的循环中绘制旭日形图?
- view - 在颤动中从小部件调用状态类
- python - “配置不当:包含的 URLconf ”
.urls 似乎没有任何模式”在尝试运行服务器时收到 - r - 如何获取所有行的共享和非共享 True 和 false 的数量
- sql - 如何合并具有相似值的两行?
- html - 为什么在 1440 像素宽度的屏幕上查看时,我的社交媒体页脚图标在屏幕外?
- python - 在多个空格但不是单个空格上拆分字符串
- java - 如果条件为真,我如何每秒自动运行一个按钮,直到 de 条件成立?
- github - 在 /blog 目录中安装 Gatsby