на соответветствие друг другу без учета регистра и если в слайсе много одинаковых - вернуть только по одному уникальному.
Пример: ["Пока","ПОКА","Привет","пока’]
Результат: Привет, пока
Не могу понять верного решения. В голову приходит примерно следующее:
двойной for и сравнивать value с первого for со вторым value + индекс 1.
Для сравнения использовать функцию strings.EqualFold.
Если она возращает false - добавляем этот элемент в пустой слайс. В конце циклов возращаем его.
Правильно ли я думаю? Или кто-то по другому решается?
Звучит как задача для мапы и strings.ToLower
func IgnoreRegistry(sliceString []string) []string { countString := make(map[string]bool) uniq := []string{} for _, v := range sliceString { if _, value := countString[strings.ToLower(v)]; !value { countString[strings.ToLower(v)] = true uniq = append(uniq, v) } } return uniq } Я вот так делал, через мапу. Но не знаю на сколько правильно для Golang такая реализация
https://golang.org/pkg/strings/#EqualFold не?
так если список большой то будет не очень эффективно. Каждый раз по uniq искать.
в первом for нужен булевый признак найденности элемента, если нашел совпадение и признак == false, ставишь true и добавляешь элемент куда надо. strings.EqualFold - регистронезависим. https://play.golang.org/p/6oyTMHuucmc
Обсуждают сегодня