Arrays 复制相同类型的数组
我想编写一个程序,接收一个数组(字符串、int或其他类型),并创建另一个相同类型的数组,该数组只包含第一个元素 例如:Arrays 复制相同类型的数组,arrays,data-structures,go,slice,Arrays,Data Structures,Go,Slice,我想编写一个程序,接收一个数组(字符串、int或其他类型),并创建另一个相同类型的数组,该数组只包含第一个元素 例如: if reflect.TypeOf(arr) == []int { arr := []int(arr[0]) } else if reflect.TypeOf(arr) == []string arr := []string(arr[0]) } ... 对于字符串数组arr:=[]字符串(“你好”,“世界”) 我的输出将是arr2:=[]字符串(arr[0]) 我
if reflect.TypeOf(arr) == []int {
arr := []int(arr[0])
} else if reflect.TypeOf(arr) == []string
arr := []string(arr[0])
} ...
对于字符串数组arr:=[]字符串(“你好”,“世界”)
我的输出将是arr2:=[]字符串(arr[0])代码>
我不能使用copy函数,因为要这样做,我必须为它创建(制作)一个新的切片。在这种情况下,我仍然需要发现第一个数组是哪种类型(字符串、int、bool等等)
也许我可以使用reflect.TypeOf()
,但我仍然不知道如何使用这些信息来创建相同类型的切片或数组
我不考虑用条件句来表达。
例如:
if reflect.TypeOf(arr) == []int {
arr := []int(arr[0])
} else if reflect.TypeOf(arr) == []string
arr := []string(arr[0])
} ...
我很乐意在那里得到帮助。
提前感谢。您可以将其重新拼接到位:
s2 := s1[0:1]
但是,如果您确实需要创建一个新切片,您可以这样做:
func f(s interface{}) interface{} {
v := reflect.ValueOf(s)
t := v.Type()
res := reflect.MakeSlice(t, 1, 1)
res.Index(0).Set(v.Index(0))
return res.Interface()
}
操场:。谢谢。我确实尝试过使用s2:=s1[:1],但在运动场上,我得到了一个错误。但是我现在在我的电脑上试过了,是的,这个解决方案很好用!再次感谢。