思考

如果对map或者slice使用for...range时,如果只用一个迭代参数,返回的是索引还是对应的值?

解答

for x,y := range map/slice时,其中第二个迭代参数可以省略。所以如果只用一个迭代参数,返回的将是索引值。
也就是说如下两行代码的功能相同:

for x := range map/slice
for x,_ := range map/slice

比如如下代码:

package main

import "fmt"

func main(){
    m := make(map[int]string)
    m[1] = "a"
    m[10] = "b"
    
    //使用两个迭代参数
    for k,v := range m{
        fmt.Printf("k = %d v = %s\n", k, v)
    }

    //只用一个迭代参数
    for x := range m{
        fmt.Printf("x = %v\n", x)
    }
}

运行结果为:

k = 1 v = a
k = 10 v = b
x = 1
x = 10

moonbamboo
37 声望2 粉丝

I am