golang for range 遍歷 對比 PHP、python

wangchunbo發表於2020-06-02

指定 key 與value

foreach($arr as $key => $value){
    echo "{$key}==>{$value}<br>";
}

也可以只獲取值。

foreach($arr as $value){
    echo "{$value}<br>";
 }

只有值

準備一個list:

list = [‘html’, ‘js’, ‘css’, ‘python’]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
if __name__ == '__main__':
    list = ['html', 'js', 'css', 'python']

    # 方法1
    print '遍歷列表方法1:'
    for i in list:
        print ("序號:%s   值:%s" % (list.index(i) + 1, i))

    print '\n遍歷列表方法2:'
    # 方法2
    for i in range(len(list)):
        print ("序號:%s   值:%s" % (i + 1, list[i]))

    # 方法3
    print '\n遍歷列表方法3:'
    for i, val in enumerate(list):
        print ("序號:%s   值:%s" % (i + 1, val))

    # 方法3
    print '\n遍歷列表方法3 (設定遍歷開始初始位置,只改變了起始序號):'
    for i, val in enumerate(list, 2):
        print ("序號:%s   值:%s" % (i + 1, val))

key value 形式

遍歷 key=>value 形式的資料dict。

for (k,v) in  dict.items(): 
    print "dict[%s]=" % k,v

在go語言中,遍歷資料或切片時可以用range,range會產生兩個值,分別是資料的索引與值:

package main

import "fmt"

func main() {
    x := []string{"a", "b", "c"}

    for v := range x {
        fmt.Println(v) //prints 0, 1, 2
    }
}

這種寫法非常不好(雖然沒有報錯),因為for…range的過程中,產生了index(索引)與value兩個值,但是在遍歷的時候,卻沒有顯示地宣告有這index變數,雖然我們此時不用index,時刻養成良好的編碼習慣。

package main

import "fmt"

func main() {  
    x := []string{"a","b","c"}

    for _, v := range x {
        fmt.Println(v) //prints a, b, c
    }
}

不用就將索引忽略!!!

在php、python 遍歷時候,如果你不需要使用 key ,那就別拿key了。

但是在 golang 中,你的遍歷自帶 key,抱歉,弟弟,你扔不掉。
那怎麼辦呢? 就是用一個匿名變數 _ 來把它 接收了吧。

例子:

sum := 0

//通過for迴圈遍歷集合中的資料

//for i := 0; i < len(arr); i++ {

    // //fmt.Println(arr[i])

    // sum += arr[i]

//}

//通過for迴圈遍歷集合中的資料

//i -> index 下標 v -> value 值

//_匿名變數 如果資料的值不需要接收 可以通過匿名變數來接收資料

for  _, v := range arr {

    //fmt.Println(i, v)

    sum += v

}

fmt.Println(sum)
本作品採用《CC 協議》,轉載必須註明作者和本文連結

上海PHP自學中心-免費程式設計視訊教學|
7Dn78VKKcW.jpg!large
S3d25uqwht.png!large

相關文章