【问题标题】:Reproducing an array of same type复制相同类型的数组
【发布时间】:2015-09-29 17:40:03
【问题描述】:

我想编写一个程序,接收一个数组(字符串、整数或其他)并创建另一个相同类型的数组,该数组仅包含第一个元素。

例如:

对于字符串数组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])
} ...

我很乐意在那里得到帮助。 提前致谢。

【问题讨论】:

    标签: arrays data-structures go slice


    【解决方案1】:

    您可以将其子切片:

    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()
    }
    

    游乐场:http://play.golang.org/p/w1N3pgvAwr.

    【讨论】:

    • 谢谢。我确实尝试过使用 s2 := s1[:1],但是在 Go Playground 上我遇到了一个错误。但我现在在我的电脑上试过了,是的,这个解决方案很好用!再次感谢。
    猜你喜欢
    • 2021-02-12
    • 2015-05-25
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2012-10-20
    相关资源
    最近更新 更多