gpt4 book ai didi

arrays - 如何将 slice 转换为数组?

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:13 25 4
gpt4 key购买 nike

我想实现一种方法,将 interface{} slice 转换为长度与给定 slice 相等的 interface{} 数组。它类似于以下内容:

func SliceToArray(in []interface{}) (out interface{}) {
...
}
// out's type is [...]interface{} and len(out)==len(in)

如何实现这个方法?

编辑:有可能使用 reflect.ArrayOf 来实现吗?

最佳答案

使用reflect.ArrayOf在给定 slice 元素类型的情况下创建数组类型。使用 reflect.New创建该类型的值。使用 reflect.Copy从 slice 复制到数组。

func SliceToArray(in interface{}) interface{} {
s := reflect.ValueOf(in)
if s.Kind() != reflect.Slice {
panic("not a slice")
}
t := reflect.ArrayOf(s.Len(), s.Type().Elem())
a := reflect.New(t).Elem()
reflect.Copy(a, s)
return a.Interface()
}

Run it on the Playground

此函数对于从 slice 和其他需要可比较值的场景创建映射键很有用。否则,通常最好在长度可以任意时使用 slice 。

关于arrays - 如何将 slice 转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54303635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com