Поиск в массиве структур - PullRequest
0 голосов
/ 13 марта 2019

У меня есть структура, определенная так:

type Issues struct {
    RedmineIssue string
    GitlabIssue string
}

Тогда я получаю список из БД

    database.Find(&Issues)

Тогда у меня есть другой массив

   redmineIssues []redmine.Issue

Есть ли способ поиска проблем в моем массиве Проблемы, которые также есть в массиве redmineIssues на основе поля RedmineIssue (строка)?


Сегодня вот что я делаю

    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 Ответ

1 голос
/ 13 марта 2019

Цикл 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...