arrays - 在 Golang 中替换数组结构中的数据

标签 arrays go struct

我有 3 个结构数据 (GOLANG),我称之为 ABC,struct当数据相似或大于 0 时,C 是结构 A 和 B 之间的结果数组替换,然后我使用数组将所有结果设置为结构 C。

Struct A, B, C {
 TransactionDate  string 
 TotalAmount      string 
 TotalTransaction string 
}

A = [
     {2019-02-01 0 0} 
     {2019-02-02 0 0} 
     {2019-02-03 0 0} 
     {2019-02-04 0 0} 
     {2019-02-05 0 0} 
     {2019-02-06 0 0} 
     {2019-02-07 0 0}
   ]

B = [
     {2019-02-02 1000 2} 
     {2019-02-07 200 3}
    ]

我希望结果是这样的

C = [
     {2019-02-01 0 0} 
     {2019-02-02 1000 2} 
     {2019-02-03 0 0} 
     {2019-02-04 0 0} 
     {2019-02-05 0 0} 
     {2019-02-06 0 0} 
     {2019-02-07 200 3}
  ]

我试过这样使用,但我仍然不喜欢我的预期结果,你能帮我解决这个问题吗?

func compareReplace() []C{
 var a []A
 var b []B
 var c []C   
 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
}

或者我们可以通过 https://play.golang.org/p/H-aaolvSDZt 进行合作

最佳答案

您的逻辑假定 a 的长度始终是有条件迭代的正确计数。 @FatchulAmin 在对@EdChan 回答的评论中分享的 Playground 暴露了当 a 大于 b 或相反时的问题,您将得到“索引超出范围”错误,因为较小的 slice 将不再具有与较大的 slice 匹配的索引。 a[i].TransactionDate == b[i].TransactionDate

为了理智,在这种情况下,您应该检查以找到要迭代的最小计数,但是,这将不允许您完全检查所有最大的 slice 。

我建议合并 slice ,然后找到最大和最小的范围并循环以从合并中删除您想要的内容。注意:@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

关于arrays - 在 Golang 中替换数组结构中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964980/

相关文章:

php - 如何在 Laravel 中对数组的值进行排序

arrays - 通过匹配与 awk 合并文件 - awk 不打印所有数组分配

javascript - 在 React 中从 JSON 推送时,数组仅存储最后一个变量

go - 在一个字符串中允许多个参数 [Go]

object - Go:结构中的方法和方法的 slice

javascript - 如何将逗号分隔的字符串数组分隔成各种数组?

go - ProtoBuf 解码 key : [ ["abc", "123"], ["123"]]

Swift 结构类型集

检查点是在圆内还是在圆外(仅使用结构体实现)

c - 从 txt 文件读取到动态分配