往期回顧:
- Go 語言教程–介紹(一)
- Go 語言教程–語言結(jié)構(gòu)(二)
- Go 語言教程–語言結(jié)構(gòu)(三)
- Go 語言教程–數(shù)據(jù)類型(四)
- Go 語言教程–語言變量(五)
- Go 語言教程–GO語言常量(六)
- Go 語言教程–GO語言運算符(七)
- Go 語言教程–GO條件和循環(huán)語句(八)
- Go 語言教程–GO語言函數(shù)(九)
- Go 語言教程–GO語言變量作用域(十)
- Go 語言教程–GO語言數(shù)組(十一)
- Go 語言教程–GO語言指針(十二)
- Go 語言教程–GO語言結(jié)構(gòu)體(十三)
- Go 語言教程–GO語言切片(Slice)(十四)
range 關(guān)鍵字在 go 語言中是相當常用好用的語法糖,可以用在 for 循環(huán)中迭代 array、slice、map、channel、字符串所有涉及到遍歷輸出的東西。
怎么用?
我們在前一節(jié)循環(huán)中初次觸及到了 range,也知道他可以省略key,或者省略value來循環(huán)遍歷的特性,但是這種特性要結(jié)合實際情況考量該用哪一個。
Go 語言中 range 關(guān)鍵字用于 for 循環(huán)中迭代數(shù)組(array)、切片(slice)、通道(channel)或集合(map)的元素。在數(shù)組和切片中它返回元素的索引和索引對應的值,在集合中返回 key-value 對。
for 循環(huán)的 range 格式可以對 slice、map、數(shù)組、字符串等進行迭代循環(huán)。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
以上代碼中的 key 和 value 是可以省略。
如果只想讀取 key,格式如下:
for key := range oldMap
或者這樣:
for key, _ := range oldMap
如果只想讀取 value,格式如下:
for _, value := range oldMap
實例
遍歷簡單的數(shù)組,2**%d 的結(jié)果為 2 對應的次方數(shù):
實例
package main
import "fmt"
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main() {
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
}
以上實例運行輸出結(jié)果為:
2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128
for 循環(huán)的 range 格式可以省略 key 和 value,如下實例:
實例
package main
import "fmt"
func main() {
map1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
map1[3] = 3.0
map1[4] = 4.0
// 讀取 key 和 value
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}
// 讀取 key
for key := range map1 {
fmt.Printf("key is: %d\n", key)
}
// 讀取 value
for _, value := range map1 {
fmt.Printf("value is: %f\n", value)
}
}
以上實例運行輸出結(jié)果為:
key is: 4 - value is: 4.000000
key is: 1 - value is: 1.000000
key is: 2 - value is: 2.000000
key is: 3 - value is: 3.000000
key is: 1
key is: 2
key is: 3
key is: 4
value is: 1.000000
value is: 2.000000
value is: 3.000000
value is: 4.000000
range 遍歷其他數(shù)據(jù)結(jié)構(gòu):
實例
package main
import "fmt"
func main() {
//這是我們使用 range 去求一個 slice 的和。使用數(shù)組跟這個很類似
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println("sum:", sum)
//在數(shù)組上使用 range 將傳入索引和值兩個變量。上面那個例子我們不需要使用該元素的序號,所以我們使用空白符"_"省略了。有時侯我們確實需要知道它的索引。
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)
}
}
//range 也可以用在 map 的鍵值對上。
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
fmt.Printf("%s -> %s\n", k, v)
}
//range也可以用來枚舉 Unicode 字符串。第一個參數(shù)是字符的索引,第二個是字符(Unicode的值)本身。
for i, c := range "go" {
fmt.Println(i, c)
}
}
以上實例運行輸出結(jié)果為:文章來源:http://www.zghlxwxcb.cn/news/detail-595837.html
sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111
總結(jié)
range可以用于for 循環(huán)中迭代 array、slice、map、channel、字符串所有涉及到遍歷輸出的東西。
for-range 的實現(xiàn)實際上是C風格的for循環(huán)
使用index,value接收range返回值會發(fā)生一次數(shù)據(jù)拷貝文章來源地址http://www.zghlxwxcb.cn/news/detail-595837.html
到了這里,關(guān)于【Go】Go 語言教程--Go 語言范圍(Range)(十五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!