复制相同类型的数组
Reproducing an array of same type
我想编写一个程序来接收一个数组(字符串、整数或其他数组)并创建另一个仅包含第一个元素的相同类型的数组。
例如:
对于字符串数组 arr := []string("hello", "world")
我的输出将是 arr2 := []string(arr[0]);
我不能使用复制功能,因为要那样做,我必须为它创建(制作)一个新的切片。在这种情况下,我仍然需要发现第一个数组是哪种类型(string、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()
}
我想编写一个程序来接收一个数组(字符串、整数或其他数组)并创建另一个仅包含第一个元素的相同类型的数组。
例如:
对于字符串数组 arr := []string("hello", "world")
我的输出将是 arr2 := []string(arr[0]);
我不能使用复制功能,因为要那样做,我必须为它创建(制作)一个新的切片。在这种情况下,我仍然需要发现第一个数组是哪种类型(string、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()
}