常见的for使用场景

举报
码乐 发表于 2025/04/26 09:45:57 2025/04/26
【摘要】 1 简介 探索意味着有一个目标,发现却意味着目光自由,胸怀坦然,没有目标。 --黑塞 2 语言框架现代软件工程承认应用范围广泛的形式化方法,以帮助确保系统在某些特定方面正确运行 隐式或明确地表明其期望的行为。类型系列的一端是强大的框架,例如 数理逻辑、代数规范语言、模态逻辑和指称语义。这些可以用来表达非常普遍的正确性属性,但通常使用起来很麻烦并要求程序员有大量的复杂性。...

1 简介

    探索意味着有一个目标,发现却意味着目光自由,胸怀坦然,没有目标。
    
    --黑塞

循环的含义是只要条件为 true,就会一遍又一遍地运行相同的代码。

比如可以模拟使用循环掷骰子,直到结果为 6,计算掷骰子的次数。

当我们知道代码应该运行多少次时,最好使用 for,而我们可以用 for 做的最基本的事情是计数。

为了进行计数,for循环使用 counting 变量来跟踪代码运行的次数。

for循环中的 count 变量设置如下:

  起始值。
  Condition 使用 count 变量,则只要条件为 true,for 循环就会运行。
  描述每次循环运行时 count 变量应如何更改。

3 go语言中的使用场景

  • 初始化条件的循环

          for i := 0; i <= 100; i++ {
                  fmt.Println(i)
              }
    
  • 嵌套循环的场景

        for i := 0; i < 5; i++ {
                for j := 0; j < 5; j++ {
                    fmt.Println(i, " - ", j, "=", i-j)
                }
      }
    
  • 循环止于某个条件

    i := 0
        for i < 10 {
            fmt.Println(i)
            i++
        }
    
  • 没有条件的循环

如何没有任何条件的循环,将会持续直到该当前进程退出。

      i := 0
          for {
              fmt.Println(i)
              i++
          }
  • 循环与break条件的配合

         i := 0
             for {
                 fmt.Println(i)
                 if i >= 10 {
                     break
                 }
                 i++
             }
    
  • 循环与 continue 条件组合使用

        i := 0
            for {
                i++
                if i%2 == 0 {
                    continue
                }
                fmt.Println(i)
                if i >= 50 {
                    break
                }
            }
    
  • 在切片中使用循环遍历序号和数据

与python的使用方法类似,range 将会返回切片中的元素的序号的数据。 小心这里的问题

      type Item struct {
          Name string
      }

      func main() {
          var all = []*Item{}
          var Items = []Item{Item{Name: "Jack"}, Item{Name: "Lucy"}}
          for _, item := range Items {
              // item := item
              all = append(all, &item)
          }
          fmt.Printf("items:%#v\n", Items)

          for ind, it := range all {
              fmt.Printf("ind:%#v it:%#v\n", ind, it)
          }

      }

4 语义for循环迭代变换问题

      var all []*Item
          for _, item := range items {
              all = append(all, &item)
          }

这段代码有一个错误。此循环执行后,all包含len(items)相同的指针,每个指针指向相同的Item,保存迭代的最后一个值。

发生这种情况是因为 item 变量是每个循环,而不是每个迭代:&item在每次迭代中都是相同的,并且在每次迭代中都会item被覆盖。通常的解决方法是这样写:

    var all []*Item
    for _, item := range items {
        item := item
        all = append(all, &item)
    }

for each 的迭代参数不能即使更新的问题

		https://github.com/golang/go/discussions/56010

5 小结

For 循环是编程中使用最广泛的循环之一,用于重复执行一组语句。我们可以使用 for 循环来迭代一系列元素,执行一组固定次数的任务。在本文中,我们将了解 For 循环的基础知识、语法以及在不同编程语言中的用法。

与其他常见循环类型(包括 while 循环和 do-while 循环)之间的比较表:

特征				For 循环							While 循环			Do-While 循环
初始化				初始化循环控制变量				需要显式初始化			需要显式初始化
条件				指定循环终止条件				在每次迭代之前检查条件		在每次迭代后检查条件
增量/递减			更新循环控制变量		 	需要在循环体中显式更新		需要在循环体中显式更新
语法复杂性		更简洁所有组件都在一条线上	需要单独的初始化和检查		 需要单独的初始化和检查
迭代灵活性		非常适合固定迭代次数		灵活适用于不同的回路条件	 灵活适用于不同的回路条件
用法			通常用于对某个范围进行迭代	当循环条件未知时很有用			当循环条件未知时很有用
无限循环	可以通过省略条件来创建			需要显式条件设置				需要显式条件设置

 例子	for (int i = 0; i < 5; i++) {...}	 while (condition) {...}	 do {...} while (condition);
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。