《每天用对比的思想学点 golang》golang for range 遍历 对比 PHP、python
php 的遍历
指定 key 与value
foreach($arr as $key => $value){
echo "{$key}==>{$value}<br>";
}
也可以只获取值。
foreach($arr as $value){
echo "{$value}<br>";
}
python 的遍历
只有值
准备一个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 的遍历
在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)
防爬虫说明
禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。
@author
汪春波(www.shxdledu.cn)
本作品采用《CC 协议》,转载必须注明作者和本文链接