Если вы хотите собрать уникальные элементы, то есть тип данных Set. Go не имеет заданного типа данных, но вы можете использовать map[string]bool
, чтобы действовать как набор.
Таким образом, вместо кусочка добавлять элементы к map[string]bool
как ключ с true
в качестве значения:
m := make(map[string]bool)
m["aaa"] = true
m["bbb"] = true
m["bbb"] = true
m["ccc"] = true
Чтобы проверить, если элемент уже в сборе (карте), вы можете просто использовать index expression:
exists := m["somevalue"]
Это эксплуатирует zero value, то есть, если карта еще не содержит элемент, значение типа значения возвращается ноль, который false
в случае bool
, правильно указывая, что элемент не находится в коллекции.
Элементы на карте не имеют фиксированного порядка. Если вам нужно сохранить заказ (например, порядок вставки), используйте фрагмент (чтобы запомнить порядок) и карту (чтобы указать, является ли добавляемый элемент новым). Это проще всего с помощью помощника add()
Функция:
var m = make(map[string]bool)
var a = []string{}
func main() {
add("aaa")
add("bbb")
add("bbb")
add("ccc")
}
func add(s string) {
if m[s] {
return // Already in the map
}
a = append(a, s)
m[s] = true
}
icza, спасибо за ваш ответ и проверку грамматики! Хм, я вижу, я понял, что мне нужно лечить Set data type самостоятельно в Go. Исходный код пуст. Это было легко понять. Большое спасибо. –