为了账号安全,请及时绑定邮箱和手机立即绑定

使用字符串切片,其中需要一个空接口切片

使用字符串切片,其中需要一个空接口切片

Go
FFIVE 2021-08-16 19:43:01
我正在尝试使用我在网上找到的带有一段字符串的集合库。该集合旨在能够采用泛型类型,但是当我尝试传入一段字符串时,我得到:不能在 mapset.NewSetFromSlice 的参数中使用 group_users(类型 []string)作为类型 []interface{}有没有办法在不创建元素类型为 interface{} 的新切片的情况下使用该函数?设置库可以在这里找到:我知道这可能很简单,我做错了,但我似乎找不到答案
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

有没有办法在不创建元素为 type 的新切片的情况下使用该函数interface{}?


并非如此:您可能需要将字符串切片转换为接口切片,如“ InterfaceSlice ”中所述(这就是为什么您不能[]Type直接从到[]interface{}):


var dataSlice []string = foo()

var interfaceSlice []interface{} = make([]interface{}, len(dataSlice))

for i, d := range dataSlice {

    interfaceSlice[i] = d

}

考虑到 aninterface{}的结构,您无法快速将一个切片转换为另一个切片。


这是一个常见问题。


查看完整回答
反对 回复 2021-08-16
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

VonC 是正确的,但如果你真的只想要一个字符串切片,实现起来相当简单


这是正在播放的StringSet的简单版本


基本思想是制作 Type -> bool 的映射(或者我认为空结构会更节省空间,但 bool 更易于使用/类型)


关键部分是:


type StringSet map[string]bool

func (s StringSet) Add(val string) {

    s[val] = true

}

然后,检查是否存在可以像 s["key"] 一样简单,因为如果存在则返回 bool true,如果不存在则返回 false(因为 false 是 bool 的默认值)


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信