2 回答
TA贡献1893条经验 获得超10个赞
您的逻辑假设的长度a始终是有条件迭代的正确计数。因为较小的切片将不再具有与较大的切片匹配的索引。a[i].TransactionDate == b[i].TransactionDate
为了理智,在这种情况下,您应该检查以找到要迭代的最小计数,但是,这将不允许您完全检查所有最大的切片。
我建议合并切片,然后找到最大和最小的范围并循环以从合并中删除您想要的内容。注意:@EdChan 使用一个结构是正确的,因为它们都是一样的。
type FooBar struct {
TransactionDate string
TotalAmount string
TotalTransaction string
}
type FooBarSlice []FooBar // this is used as a receiver on func Remove
func compareReplace(a []FooBar, b []FooBar) []FooBar {
var c FooBarSlice
c = append(a, b...)
var largerSlice []FooBar
var smallerSlice []FooBar
if len(a) <= len(b) {
largerSlice = b
smallerSlice = a
} else {
largerSlice = a
smallerSlice = b
}
for _, v := range smallerSlice {
for j := 0; j < len(largerSlice); j++ {
if largerSlice[j].TransactionDate == v.TransactionDate && largerSlice[j].TotalTransaction == "0" {
c.Remove(j)
}
}
}
return c
}
完整的工作示例:https ://play.golang.org/p/iyUYtXlDG54
TA贡献1801条经验 获得超15个赞
首先,我会考虑只声明一个结构,因为A,B和 的字段C是相同的。例如:
type FooBar struct {
TransactionDate string
TotalAmount string
TotalTransaction string
}
然后对于你的功能,你可以尝试将其重写为:
func compareReplace(a []FooBar, b []FooBar) []FooBar{
var c []foobar
for i := 0; i < len(a); i++ {
if a[i].TransactionDate == b[i].TransactionDate {
if b[i].TotalTransaction != "0" {
c = append(c, b[i])
}
}
}
return c
}
最后你可能想要修复你的逻辑:
func compareReplace(a []FooBar, b []FooBar) []FooBar{
var c []foobar
for i := 0; i < len(a); i++ {
if a[i].TransactionDate == b[i].TransactionDate {
if b[i].TotalTransaction != "0" {
c = append(c, b[i])
}
} else {
// You might want to append a[i] if the date is mismatching
c = append(c, b[i])
}
}
return c
}
- 2 回答
- 0 关注
- 140 浏览
添加回答
举报