当前位置: 首页 > 面试题库 >

遍历接口数组

沙宣
2023-03-14
问题内容

我写了代码:

switch v.(type) {
        case []interface{}:
            fmt.Println(reflect.TypeOf(v))
            for index, element := range v {
                fmt.Println("Inside for")
            }
        default:
            fmt.Println("I don't know how to handle this.")
        }

现在,我reflect.TypeOf(v)将类型输出为[]interface {}。但是,我无法遍历接口数组。我遇到错误:cannot range over v (type interface {})。有人可以解释一下为什么吗?另外,有什么解决方法?


问题答案:

在类型开关中,如果您希望访问强制转换为适当类型的变量,则只需使用类似的命令,switch x := v.(type)并且在每种情况下,开关x将具有适当的值。规范中有一个例子。您甚至可以这样做,switch v := v.(type)并且在switch语句中将有v的阴影版本。

例如:

switch x := v.(type) {
case []interface{}:
        fmt.Printf("got %T\n", x)
        for i, e := range x {
                fmt.Println(i, e)
        }
default:
        fmt.Printf("I don't know how to handle %T\n", v)
}

playground

还要注意,fmt.Printf当您只想打印变量的类型时,可以只使用“%T” 代替(直接)使用reflect包。

最后,请注意,如果您有多个非默认子句,则需要使用类型开关,但是,例如在您的示例中,如果您确实只对一种类型感兴趣,则应该执行以下操作:

if x, ok := v.([]interface{}); ok {
        fmt.Printf("got %T\n", x)
        for i, e := range x {
                fmt.Println(i, e)
        }
} else {
        fmt.Printf("I don't know how to handle %T\n", v)
}


 类似资料:
  • 问题内容: 我想创建一个函数,该函数需要一个映射或一个数组,然后对其进行迭代,并在每个项目上调用一个函数,该函数知道如何处理遇到的任何类型。 这是我第一次失败的尝试。当前,当我在实际用例中运行它时,它总是显示“呃哦!”。 数组或映射可能包含许多不同的内容,因此无法尝试匹配每个可能的输入。 换句话说, 是否有一种方法可以遍历Go中的数组或映射,而又不确切知道它是什么? 问题答案: 该功能正是您想要的

  • Array类实现了迭代器,可使用迭代器对数组进行遍历,如果是数字索引数组,还可以直接使用for循环进行遍历。 数字索引数组 for(int i = 0; i < array.count(); i++) { php::echo("key=%d, value=%s.\n", i, array[i].toCString()); } 迭代器 for(auto i = array.begin();

  • 问题内容: 我想知道是否有一个更好的方法来将此方法传递给该方法,或者在每次我想检查是否存在数字时将其写出更好。 例如: 我在这里先向您的帮助表示感谢! 问题答案: 您绝对应该将此逻辑封装到方法中。 多次重复相同的代码没有任何好处。 同样,如果将逻辑放在一种方法中并且它改变了,则只需在一个地方修改代码即可。 是否要使用第三方库是完全不同的决定。

  • 主要内容:遍历顺序,指定遍历顺序,修改数组元素值,外部循环使用,迭代多个数组NumPy 提供了一个 nditer 迭代器对象,它可以配合 for 循环完成对数组元素的遍历。 下面看一组示例,使用 arange() 函数创建一个 3*4 数组,并使用 nditer 生成迭代器对象。 示例1: 输出结果: 0 5 10 15 20 25 30 35 40 45 50 55 遍历顺序 在内存中,Numpy 数组提供了两种存储数据的方式,分别是 C-order(行优先顺序)与 F

  • 问题内容: 我有这个数组…如何打印每个文件路径和文件名?做这个的最好方式是什么? 问题答案: 使用无键循环 使用键循环 使用循环 是获取数组或对象快照的非常有用的功能。

  • Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。 1. 数组元素访问 1.1 按照内存布局打印数组元素 在默认情况下,numpy.nditer 迭代器返回的元素顺序,是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先。 案例 例如,我们对于新创建的 2×3 的数组,利用 nditer 迭代器进行顺序访问: ar