dmnBrest
@dmnBrest
Salesforce for money. Python, Go, Ruby for soul.

Набор уникальных значений (Set) в Go?

Задался вопросом получения списка parent Ids из подчиненных записей.
Но так чтобы это был список уникальных значений.
Обычно в других языках программирования использую Set для этого, но в Go ничего похожего не нашел.
Зато нашел вот такое решение:

uIds := make(map[string]bool)
for _, a := range articles {
	uIds[strconv.Itoa(a.UserId)] = true
}
uIdsSet := make([]string, 0, len(uIds))
for k := range uIds {
	uIdsSet = append(uIdsSet, k)
}

Это нормальное решение? Или есть способ более элегантный?
  • Вопрос задан
  • 5000 просмотров
Решения вопроса 2
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Я использую AppendIfMissing
stackoverflow.com/a/9561388

Но ваше решение тоже неплохое.
Ответ написан
Комментировать
@SilentFl
Для абстрактного случая заменой set'у является map:
set := make(map[string]bool)
set["SomeValue"] = true  //поместили элемент в множество
...
if _, ex := set["SomeValue2"]; ex {
  //проверили, что элемент существует (именно что _существует_, а не == true, с точно таким же результатом можно было засунуть false)
...
delete(set, "SomeValue3")  //удалили элемент из множества

в некоторых случаях может быть использован вариант Sergey Lerg'а, но мне лично мне это решение не очень нравится линейной сложностью вставки, проще уж тогда явно оперировать через перечисления/массив:
package main

import "fmt"

const (
	first = iota
	second
	third
)
	
func main() {
	var a [3]bool
	a[first] = true
	fmt.Printf("%+v", a)
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы