搜索结构数组

时间:2019-03-13 09:09:02

标签: database go

我有一个这样定义的结构:

type Issues struct {
    RedmineIssue string
    GitlabIssue string
}

然后我从数据库中获取列表

    database.Find(&Issues)

然后我有另一个数组

   redmineIssues []redmine.Issue

有什么方法可以在我的数组中搜索问题吗?同样基于字段RedmineIssue(string)的数组redmineIssues中的问题吗?


今天这是我在做什么

    database.Find(&Issues)
    redmineIssue := []string{}
    for _, issueRedmine := range Issues {
        redmineIssue = append(redmineIssue, issueRedmine.RedmineIssue)
    }

    gitlabissues := []string{}
    for _, issueGitlab := range Issues {
        gitlabissues = append(gitlabissues, issueGitlab.GitlabIssue)
    }

然后我可以与我拥有的另一个数组进行比较

for _, issueR := range IssueFromRedmineWS {
    inArray, _ := in_array(issueR.Id, redmineIssue)
    if !inArray {
        // The issue is not in the DB
    }
}

关于如何优化它并使它更清洁的任何想法?

1 个答案:

答案 0 :(得分:1)

for循环是正确的方法。假设您粘贴的代码实际上有效,则可以将其合并为一个for循环,即编写方式。

database.Find(&Issues)
redmineIssue := []string{}
gitlabissues := []string{}
for _, issue := range Issues {
    redmineIssue = append(redmineIssue, issue.RedmineIssue)
    gitlabissues = append(gitlabissues, issue.GitlabIssue)
}

但这假设Issues是一个数组。哪个与您的其余问题不符。根据您对Issues的定义,尽管如此,您发布的代码甚至无法编译。因此,我也不知道这段代码是否也适合您。

您可以通过预分配数组来提供另一种微优化:

database.Find(&Issues)
redmineIssue := make([]string{}, 0, len(Issues))
gitlabissues := make([]string{}, 0, len(Issues))