golang range遍历数组,切片,集合

go 语言中range关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

range 变量

大多数人都知道在range子句的左边(在上面的例子中的i)你可以使用以下命令分配循环变量:

-- 赋值(=)

-- 短变量声明(:=)

你也可以选择不做任何事情来完全忽略循环变量。

如果使用短变量声明(:=),Go将为循环的每次迭代重用变量(仅在循环的范围内)

range 表达式

在range子句的右侧(在下面的示例中array),你可以找到他们称之为range表达式的内容。它可以包含任何计算结果为以下之一的表达式:

-- array

-- pointer to an array

-- slice

-- string

-- map

-- channels that allow receiving, e.g. chan int or chan

实例 1:

<code>

package

main

import

"fmt"

func

main

()

{ array := [

3

]

int

{

1

,

2

,

3

} slice := []

int

{

10

,

11

,

12

,

13

} kvs :=

map

[

string

]

string

{

"a"

:

"A"

,

"b"

:

"B"

,

"c"

:

"C"

}

for

i, v :=

range

array { fmt.Println(i, v) }

for

i, v :=

range

slice { fmt.Println(i, v) }

for

k, v :=

range

kvs { fmt.Println(k, v) } }/<code>

输出:

<code>

0

1

1

2

2

3

*****************

0

10

1

11

2

12

3

13

*****************

a

A

b

B

c

C

/<code>

如果将for range 数组,切片和集合的v去掉,变成如下代码,range将分别返回对应数组和列表的索引,以及集合的键。

实例2:

<code>

package

main

import

"fmt"

func

main

()

{ array := [

3

]

int

{

1

,

2

,

3

} slice := []

int

{

10

,

11

,

12

,

13

} kvs :=

map

[

string

]

string

{

"a"

:

"A"

,

"b"

:

"B"

,

"c"

:

"C"

}

for

i :=

range

array { fmt.Println(i) }

for

i :=

range

slice { fmt.Println(i) }

for

k :=

range

kvs { fmt.Println(k) } }/<code>

输出:

<code>

0

1

2

*****************

0

1

2

3

*****************

a

b

c

/<code>