go 将sturct合并

信仰者
  • 272

定义了一个结构体

type TotalIssue struct {
    IssueType string `json:"issue_type"`
    Count     int    `json:"count"`
    Donecount int `json:"donecount"`
}

最后获取到两个结果如下

[{QA 10 0} {OPS 7 0} {RDC 14 0} {TEST 1 0} {WWW 22 0}]
[{OPS 0 2} {TEST 0 1} {WWW 0 18}]

想将上面的结果合并成

[{QA 10 0} {OPS 7 2} {RDC 14 0} {TEST 1 1} {WWW 22 18}]
回复
阅读 4.4k
3 个回答
    arr1 := []TotalIssue{{IssueType: "QA", Count: 10, Donecount: 1}, {IssueType: "QC", Count: 10, Donecount: 1}}
    arr2 := []TotalIssue{{IssueType: "QB", Count: 12, Donecount: 2}}
    arr3 := append(arr1, arr2...) //必须加后面三个点
  • TotalIssue提供一个产生唯一标识的方法hashKeymerge方法
  • 定义一个Set类型,提供AddToArray方法
  • 分别遍历两个列表,使用Set.Add来加入到Set中去

如下:

type Set struct {
    d map[string]*TotalIssue
}

func (s *Set) Add(item *TotalIssue) {
    if v, ok := s.d[item.hashKey()]; ok {
        v.merge(item)
    } else {
        s.d[item.hashKey()] = item
    }
}

func (s *Set) ToArray() []*TotalIssue {
    arr := make([]*TotalIssue, len(s.d))
    // ... get item from d
    return 
}

没有好办法,两次遍历吧。

宣传栏