Skip to content

循环

Go

go
type Person struct {
    Name string
    Age  int
}

people := []Person{
    {"张三", 20},
    {"李四", 25},
    {"Allen Iverson", 30},
}

// 遍历
for i, p := range people {
    fmt.Printf("%d: %s (%d 岁)\n", i, p.Name, p.Age)
}

// for … range
for i, p := range people {
    fmt.Println(i, p.Name, p.Age)
}

// 只要对象
for _, p := range people {
    fmt.Println(p.Name)
}

// 索引访问
for i := 0; i < len(people); i++ {
    fmt.Println(people[i].Name)
}

// 遍历 map
m := map[string]int{"张三": 20, "李四": 30}
for k, v := range m {
    fmt.Println(k, v)
}

// while 风格
i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

// 无限循环
for {
    fmt.Println("死循环啦")
}
  • 大坑:Go 的 for range 会拷贝元素,如果你想在循环里改对象,用指针或索引访问

Python

  • 遍历列表
py
weapons = ["AK-47", "M4A1", "AWP"]
for weapon in weapons:
    print(f"武器:{weapon}")
  • 携带下标循环
py
weapons = ["AK-47", "M4A1", "AWP"]
for i, weapon in enumerate(weapons):
    print(f"Index={i}, {weapon}")

for i, weapon in enumerate(weapons, start=1):
    print(f"Index={i}, {weapon}")
  • 配合 range
py
for i in range(5):
    print(f"第{i}次循环")
  • 遍历字符串
py
for ch in "Python":
    print(ch)

Java

java
// for 循环
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
  • 增强 for
java
List<String> names = List.of("张三", "李四", "Allen Iverson");
for (String name : names) {
    System.out.println(name);
}
  • 迭代器 Iterator
java
List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");

Iterator<String> it = names.iterator();
while (it.hasNext()) {
    String name = it.next();

    // 适合遍历中需要删除元素
    if (name.equals("李四")) {
       it.remove();
    }

    System.out.println(name);
}
  • Stream API
java
names.forEach(n -> System.out.println("你好, " + n));

C++

TODO

JavaScript

简单循环

容器循环

Bash

  • IFS 变量展开
bash
IFS=,
names="A,B,C"
for name in $names; do
  echo "Hello, ${name}?"
done
  • 遍历列表 空格元素
bash
list=("张三" "李四" "Allen Iverson")

for name in "${list[@]}"; do
  echo "Hello, ${name}!"
done

for name in ${list[@]}; do
  echo "Hello, ${name}!"
done

for name in ${list[*]}; do
  echo "Hello, ${name}!"
done

for name in "${list[*]}"; do
  echo "Hello, ${name}!"
done
  • 结合 seq 做数值循环
bash
nums=$(seq 1 5)

for n in $nums; do
  echo "Hello, ${n}."
done

Lua

TODO

Ruby

TODO