首页 > 解决方案 > 在结构数组中搜索

问题描述

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

type Issues struct {
    RedmineIssue string
    GitlabIssue string
}

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

    database.Find(&Issues)

然后我有另一个数组

   redmineIssues []redmine.Issue

有没有办法在我的数组问题中搜索问题,这些问题也在数组 redmineIssues 基于字段 RedmineIssue(string) 中?


今天这就是我正在做的事情

    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
    }
}

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

标签: databasego

解决方案


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))

推荐阅读