英文:
How to compare slice of struct
问题
type RecordProxy struct {
Amt int `csv:"Amt"`
Descr string `csv:"Descr"`
Date string `csv:"Date"`
ID string `csv:"ID"`
}
type RecordSource struct {
Date string `csv:"Date"`
ID string `csv:"ID"`
Amount int `csv:"Amount"`
Description string `csv:"Description"`
}
我有一个 []RecordProxy
和 []RecordSource
的结构体切片,我想检查这两个结构体切片是否相等。
你有什么想法吗?
英文:
type RecordProxy struct {
Amt int `csv:"Amt"`
Descr string `csv:"Descr"`
Date string `csv:"Date"`
ID string `csv:"ID"`
}
type RecordSource struct {
Date string `csv:"Date"`
ID string `csv:"ID"`
Amount int `csv:"Amount"`
Description string `csv:"Description"`
}
i have a slice of struct []RecordProxy
and []RecordSource
i want to check if this 2 slice of struct is equal.
do you have any idea?
答案1
得分: 2
如@mkopriva所评论的“你必须实现自己的自定义比较方式”,即根据两个切片的规则来确定它们是否相等。
这只是一个示例:
func CompareRecords(a []RecordProxy, b []RecordSource) bool {
lengthA, lengthB := len(a), len(b)
if lengthA != lengthB {
return false
}
for i := range a {
// 定义自己的不相等规则:
if a[i].Amt != b[i].Amount ||
// 结构体字段的其他规则...
a[i].Date != b[i].Date {
return false
}
}
return true
}
英文:
As @mkopriva comments "you have to implement your own custom way of comparing", i.e. tell what rules to according to the two slices could be considered equal.
Only an example:
func CompareRecords(a []RecordProxy, b []RecordSource) bool {
lengthA, lengthB := len(a), len(b)
if lengthA != lengthB {
return false
}
for i := range a {
// define your own unequal rules:
if a[i].Amt != b[i].Amount ||
// other rules for fields of structs...
a[i].Date != b[i].Date {
return false
}
}
return true
}
答案2
得分: 0
比较结构体切片(a、b)的更好方法是使用反射:
if len(a) != len(b) {
return false
}
flag := true
for i := 0; i < len(a); i++ {
if reflect.DeepEqual(a[i], b[i]) {
flag = true
} else {
flag = false
}
}
// 验证 flag
if flag == false {
return false
} else {
return true
}
请注意,这段代码存在一些错误,我只是按照你提供的内容进行了翻译。
英文:
the better way to compare slice of structs ( a, b) is using reflect if
if len(a) != len(b) {
return false
}
flag := true
for i:=0; len(a); i++{
if reflect.DeepEqual(a[i], b[i]) {
falg = true
} else {
flag = flase
}
}
//verify flag
if flag == false{
return false
} else {
return true
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论