type Set[T int | string] struct { List []T init bool unique map[T]int } func (s *Set[T]) Add(value T) bool { if !s.init { s.unique = make(map[T]int, 10) s.init = true } if _, ok := s.unique[value]; !ok { s.unique[value] = 1 s.List = append(s.List, value) return true } else { s.unique[value]++ return false } } func (s Set[T]) String() string { return s.List.String() }这样打印Set会出席什么结果
时间: 2024-01-30 20:01:28 浏览: 70
这段代码存在语法错误,因为 `List.String()` 是无效的方法调用。如果想要打印 `Set[T]` 中的元素列表,可以使用 `fmt.Sprintf()` 函数将其转换为字符串,然后返回该字符串,例如:
```
func (s Set[T]) String() string {
var str strings.Builder
str.WriteString("[")
for i, v := range s.List {
if i > 0 {
str.WriteString(", ")
}
str.WriteString(fmt.Sprintf("%v", v))
}
str.WriteString("]")
return str.String()
}
```
这个实现将 `Set[T]` 中的元素列表转换为形如 `[elem1, elem2, ...]` 的字符串。注意,这里使用了 `fmt.Sprintf()` 函数将 `T` 类型的元素转换为字符串,所以需要保证 `T` 类型实现了 `fmt.Stringer` 接口或者有一个 `String()` 方法。
阅读全文