不同开发语言之for循环的用法、区别总结

news2025/3/10 20:47:07

一、Objective-C

(1)标准的c风格

for (int i = 0; i < 5; i++) {
    NSLog(@"i = %d", i);
}

(2)for in循环。

NSArray *array = @[@"apple", @"banana", @"orange"];
for (NSString *fruit in array) {
    NSLog(@"%@", fruit);
}

//这个遍历输出的是值,而不是健

(3)基于块的枚举(Block-Based Enumeration)

Objective-C 提供了基于块的枚举方法,例如 enumerateObjectsUsingBlock:,可以遍历集合类并执行块中的代码。

NSArray *array = @[@"apple", @"banana", @"orange"];
[array enumerateObjectsUsingBlock:^(NSString *fruit, NSUInteger idx, BOOL *stop) {
    NSLog(@"%@ at index %lu", fruit, (unsigned long)idx);
}];

apple at index 0
banana at index 1
orange at index 2

这个类似于python中的for index,item in enumerate(strkk):,可以得到索引值以及内容(值),而且可以通过设置stop值==yes来终止循环

(4)while循环

int i = 0;
while(i<5){
    NSlog(@"%d",i)
    i++;
}
//输出:0 1 2 3 4 

(5)do...while循环

int i= 0 
do{

   NSLog(@"%d",i)
   // 0 1 2 3 4 
   i++

}while(i<5)

二、Python

(1)range()函数

      for   in range(起始, 结束, 步长)

string = "0123456789"
for i in range(0,len(string),2):
    print(f'输出的数据i==={i}')

#输出的数据i===0
#输出的数据i===2
#输出的数据i===4
#输出的数据i===6
#输出的数据i===8

注意range后面的参数,启始、结束、步长,写一个参数代表结束位置,不包括结束位置

对比 Objective-C:

  • 类似于 Objective-C 的标准 for 循环(for (int i = 0; i < 5; i++))。

  • Python 的 range() 更简洁,不需要手动管理循环变量。

(2)for in循环

fruits = ["apple", "banana", "orange"]
for fruit in fruits:
    print(fruit)

对比 Objective-C:

  • Objective-C 的快速枚举(for...in)与 Python 的 for 循环非常相似。

  • Python 的 for 循环更简洁,不需要指定类型。

(3)enumerate() 函数,也是for in的一种,类似

enumerate() 函数用于在遍历时同时获取索引和值。

fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
    print(f"Index: {index}, Fruit: {fruit}")

Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: orange

对比 Objective-C:

  • 类似于 Objective-C 的基于块的枚举(enumerateObjectsUsingBlock:)。

  • Python 的 enumerate() 更简洁,不需要额外的语法。

(4)while循环

i = 0
while i < 5:
    print(f"i = {i}")
    i += 1

对比 Objective-C:

  • 与 Objective-C 的 while 循环几乎一致。

  • Python 不需要分号或大括号,使用缩进来定义代码块。

Python 的设计哲学强调简洁性和可读性。do...while 循环的使用场景相对较少,而且可以通过 while True 和 break 轻松模拟,因此 Python 没有专门引入 do...while 语法。

(5)列表推导式(就是for in循环中写表达式)

列表推导式是一种简洁的创建列表的方式,可以替代简单的 for 循环。

[表达式 for 变量 in 可迭代对象]

squares = [x ** 2 for x in range(5)]
print(squares)

#[0, 1, 4, 9, 16]
  • 先看for in range函数,输出的x在加上前面的表达式,然后最终生成值输出

  • Python 的列表推导式非常简洁,适合快速生成列表。

(6)zip() 函数

zip() 函数用于同时遍历多个可迭代对象。

for 变量1, 变量2 in zip(可迭代对象1, 可迭代对象2):
    # 循环体

fruits = ["apple", "banana", "orange"]
prices = [1.0, 0.5, 0.8]
for fruit, price in zip(fruits, prices):
    print(f"Fruit: {fruit}, Price: {price}")

#Fruit: apple, Price: 1.0
#Fruit: banana, Price: 0.5
#Fruit: orange, Price: 0.8

这个其实没有特殊的,就是通过for in 同时遍历多个对象

三、Swift

swift中先明白什么是区间运算符

  • 闭区间运算符(n…m),n 不能大于 m,相当于数学的 [n, m]

  • 半开区间运算符(n…<m),相当于数学的 [n, m)

(1)for in 区间

//开区间,输出12到30包括12和30
 for index in 12...30{
    print("index==\(index)")
 }
//半开区间,输出12到29,不包括30
 for index in 12..<30{
    print("index==\(index)")
 }

    (2)stride 函数(其实类似python中的for in range)

            for 变量 in stride(from: 起始值, to: 结束值, by: 步长) {
                // 循环体
            }
            for index in stride(from: 0, to: 20, by: 3){
                print("输出index==\(index)")
            }
            /*
             输出index==0
             输出index==3
             输出index==6
             输出index==9
             输出index==12
             输出index==15
             输出index==18
             */
    •  swift中的这for in 加区间运算以及 for in stride函数类似python的for in range 函数,

    • 第一个函数swift使用范围运算符(..< 或 ...),stride函数类似python使用range(启始、结束、步长),

    (3)for-in 循环

    let fruits = ["apple", "banana", "orange"]
    for fruit in fruits {
        print(fruit)
    }
    #输出apple banana orange
    • Swift 的 for-in 跟python、oc中的差不多,都是输出内容值,不是索引

    (4)enumerated循环

    let fruits = ["apple", "banana", "orange"]
    for (index, fruit) in fruits.enumerated() {
        print("Index: \(index), Fruit: \(fruit)")
    }
    • 类似于 Objective-C 的基于块的枚举(enumerateObjectsUsingBlock:)。

    • 类似于python中的enumerate

    for k,v in enumerate(strkk):
        print(f'k=={k},v={v}')

    (5)while循环

     var i = 0
     while (i < 5) {
        print("i==\(i)")
        i += 1
     }

    while函数也跟python、oc差不多,只是这里注意swift的语法,

    • Swift 不需要分号或括号,使用缩进来定义代码块

    • 运算符之间需要有空格

    • 不能使用oc中的i++,需要写成 i += 1

    (6)repeat-while循环

    var i = 0
    repeat {
        print("i = \(i)")
        i += 1
    } while i < 5

    • 类似于 Objective-C 的 do...while 循环:

    int i = 0;
    do {
        NSLog(@"i = %d", i);
        i++;
    } while (i < 5);
    • Swift 的 repeat-while 更简洁。

    (7)forEach 方法

    let fruits = ["apple", "banana", "orange"]
    fruits.forEach { fruit in
        print(fruit)
    }
    

    注意swift中forEach的写法,注意区别与js的写法

    四、Kotlin

    (1)类似swift的tride函数

    kotlin中也有区间运算符..跟swift you区别

    1、闭区间运算swift是...,但是kotlin是..和一个是三个点一个是两个点

    2、半封闭区间,swift是..<,kotlin用until 表示左闭右开区间

    //这个类似swift的...闭空间,输出内容包括4
    for (i in 0..4) {
        println("i = $i")
    }
    
    //下面这个是until表示半封闭空间,不包括10 ,加了步长step
    for (i in 0 until 10 step 2) {
        println("i = $i")
    }
    

    对比 Swift:

    • 类似于 Swift 的 stride 函数:

      for i in stride(from: 0, to: 10, by: 2) {
          print("i = \(i)")
      }

    (2)for-in 循环

    val fruits = listOf("apple", "banana", "orange")
    for (fruit in fruits) {
        println(fruit)
    }

    对比 Swift:

    • 类似于 Swift 的 for-in 循环。

    • Kotlin 的 for 循环更简洁,不需要指定类型。

    (3)withIndex 方法(类似swift的enumerated循环)

    val fruits = listOf("apple", "banana", "orange")
    for ((index, fruit) in fruits.withIndex()) {
        println("Index: $index, Fruit: $fruit")
    }

    对比 Swift:

    • 类似于 Swift 的 enumerated 方法:

    for (index, fruit) in fruits.enumerated() {
        print("Index: \(index), Fruit: \(fruit)")
    }
    • Kotlin 的 withIndex 语法更简洁。

    (4)while循环、do-while 循环

    while循环、do-while 循环kotlin跟swift以及oc都差不多,只是swift没有do-while 循环,而是叫做repeat-while,效果都一样

    var i = 0
    while (i < 5) {
        println("i = $i")
        i++
    }
    
    var i = 0
    do {
        println("i = $i")
        i++
    } while (i < 5)

    Kotlin 的集合类提供了 forEach 方法,用于遍历集合中的每个元素。

    (4)forEach 方法

    val fruits = listOf("apple", "banana", "orange")
    fruits.forEach { fruit ->
        println(fruit)
    }

    对比 Swift:

    • 类似于 Swift 的 forEach 方法:

    fruits.forEach { fruit in
        print(fruit)
    }

    五、Js

    (1)标准的c风格

    for (let i = 0; i < 5; i++) {
        console.log(`i = ${i}`);
    }

    (2)for...in 循环

    for...in 循环会遍历对象的所有可枚举属性(包括原型链上的属性),对于字符串,for...in 会遍历字符串的索引(键),而不是直接遍历字符。

    (3)for...of 循环

            //这里遍历的是索引
            for (const index in string) {
                console.log(`输出的内容${index}`)
            }
            //for of遍历的是内容值
            for (const element of string) {
                console.log(`输出的内容${element}`)
            }       

    js中for in循环出来的是索引,想要得到内容值需要for of,但是这里要注意,虽然 for...in 可以用于数组或字符串,但它会遍历所有可枚举属性,包括原型链上的属性,可能会导致意外行为。对于数组或字符串,更推荐使用 forfor...of 或 forEach 等方法,比如:

    // 给字符串的原型添加一个属性
    String.prototype.customProp = "test";
    
    const str = "hello";
    for (const index in str) {
      console.log(`Index: ${index}, Character: ${str[index]}`);
    }
    
    Index: 0, Character: h
    Index: 1, Character: e
    Index: 2, Character: l
    Index: 3, Character: l
    Index: 4, Character: o
    Index: customProp, Character: t

    我们看到它不止是遍历出了hello还遍历出了customProp属性

    (4)while循环、do-while 循环

    while循环、do-while 循环kotlin跟swift以及oc都差不多,只是swift没有do-while 循环,而是叫做repeat-while,效果都一样

    (5)forEach 方法

    const fruits = ["apple", "banana", "orange"];
    fruits.forEach((fruit) => {
        console.log(fruit);
    });

    (6)map 方法(针对数组)

    const 新数组 = 数组.map((变量) => {
        // 返回新值
    });
    const numbers = [1, 2, 3];
    const squares = numbers.map((num) => num * num);
    console.log(squares);

    对比 Swift:

    • Swift 的 map 方法:JavaScript 的 map 与 Swift 的 map 非常相似。

      let numbers = [1, 2, 3]
      let squares = numbers.map { $0 * $0 }
      print(squares)
    • 对比python,其实也很像python中的列表推到式

      squares = [i ** 2 for i in range(1,4,1)]
      print(f'打印出squares=={squares}') 

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2311829.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模

    2025-03-05&#xff0c;由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE&#xff08;MuJoCo and Blender simulation Environment&#xff09;模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染&#xff0c;为机器人操作任务规划提供了逼真的视…

    ASP.NET Core 6 MVC 文件上传

    概述 应用程序中的文件上传是一项功能&#xff0c;用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件&#xff0c;然后根据需要对文件进行一些验证&#xff0c;最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…

    2025年03月07日Github流行趋势

    项目名称&#xff1a;ai-hedge-fund 项目地址url&#xff1a;https://github.com/virattt/ai-hedge-fund项目语言&#xff1a;Python历史star数&#xff1a;12788今日star数&#xff1a;975项目维护者&#xff1a;virattt, seungwonme, KittatamSaisaard, andorsk, arsaboo项目…

    Cursor + IDEA 双开极速交互

    相信很多开发者朋友应该和我一样吧&#xff0c;都是Cursor和IDEA双开的开发模式:在Cursor中快速编写和生成代码&#xff0c;然后在IDEA中进行调试和优化 在这个双开模式的开发过程中&#xff0c;我就遇到一个说大不大说小不小的问题&#xff1a; 得在两个编辑器之间来回切换查…

    3.3.2 用仿真图实现点灯效果

    文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…

    点云软件VeloView开发环境搭建与编译

    官方编译说明 LidarView / LidarView-Superbuild GitLab 我的编译过程&#xff1a; 安装vs2019&#xff0c;windows sdk&#xff0c;qt5.14.2&#xff08;没安装到5.15.7&#xff09;&#xff0c;git&#xff0c;cmake3.31&#xff0c;python3.7.9&#xff0c;ninja下载放到…

    PDF处理控件Aspose.PDF,如何实现企业级PDF处理

    PDF处理为何成为开发者的“隐形雷区”&#xff1f; “手动调整200页PDF目录耗时3天&#xff0c;扫描件文字识别错误导致数据混乱&#xff0c;跨平台渲染格式崩坏引发客户投诉……” 作为开发者&#xff0c;你是否也在为PDF处理的复杂细节消耗大量精力&#xff1f;Aspose.PDF凭…

    《2025年软件测试工程师面试》消息队列面试题

    消息队列 消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;是一种应用程序之间的通信方法。 基本概念 消息队列是一种先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;它允许一个或多个消费者从队列中读取消息&#xff0c;也允许一个或多个生产者…

    大数据学习(55)-BI工具数据分析的使用

    &&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

    原生android 打包.aar到uniapp使用

    1.原生安卓里面引入uniapp官方提供的包文件&#xff1a; uniapp-v8-release.aar 2.提供uniapp调用的接口&#xff0c;新建类文件继承UniModule&#xff0c; package com.dermandar.panoramal;import com.scjt.lib.certlib;import io.dcloud.feature.uniapp.annotation.UniJSM…

    解锁MacOS开发:环境配置与应用开发全攻略

    ✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 &#xff08;一&#xff09;必备工具安装 &#xff08;二&#xff09;集成开发环境&#xff08;IDE&#xff09;选…

    Aruco 库详解:计算机视觉中的高效标记检测工具

    1. 引言&#xff1a;Aruco 在计算机视觉中的重要性 在计算机视觉领域&#xff0c;标记&#xff08;Marker&#xff09;检测和识别是许多应用的基础&#xff0c;包括 机器人导航、增强现实&#xff08;AR&#xff09;、相机标定&#xff08;Calibration&#xff09;以及物体跟踪…

    第005文-模拟入侵网站实现0元购

    1、部署导入靶场&#xff0c;部署购物网站 首先在虚拟机中新增一个centos虚拟机&#xff0c;在上面部署一套完整的购物网站&#xff0c;使用mysql数据库&#xff0c;访问端口是80。这个新增的centos虚拟机就是我们的靶场。购物网站在网上随便找一套开源的部署即可。 2、在网站…

    23种设计模式简介

    一、创建型&#xff08;5种&#xff09; 1.工厂方法 总店定义制作流程&#xff0c;分店各自实现特色披萨&#xff08;北京店-烤鸭披萨&#xff0c;上海店-蟹粉披萨&#xff09; 2.抽象工厂 套餐工厂&#xff08;家庭装含大披萨薯条&#xff0c;情侣装含双拼披萨红酒&#…

    HTML前端手册

    HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案&#xff0c;供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…

    利用 requestrepo 工具验证 XML外部实体注入漏洞

    1. 前言 在数字化浪潮席卷的当下&#xff0c;网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时&#xff0c;也可能暗藏安全风险。XXE&#xff08;XML外部实体&#xff09;漏洞作为其中的典型代表&#xff0c;攻击者一旦利用它&#xff0c;便能窃取敏感信息、掌控服务…

    引领变革!北京爱悦诗科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!

    在2025年“GAS消费电子科创奖”评选中&#xff0c;北京爱悦诗科技有限公司提交的“aigo爱国者GS06”&#xff0c;在技术创新性、设计创新性、工艺创新性、智能化创新性及原创性五大维度均获得评委的高度认可&#xff0c;荣获“产品创新奖”。 这一奖项不仅是对爱悦诗在消费电子…

    纯html文件实现目录和文档关联

    目录结构 效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>项目结题报告</title><style lang"scss">::-webkit-scrollbar {width: 6px;height: 6px;}::-webkit-scro…

    共绘智慧升级,看永洪科技助力由由集团起航智慧征途

    在数字化洪流汹涌澎湃的当下&#xff0c;企业如何乘风破浪&#xff0c;把握转型升级的黄金机遇&#xff0c;已成为所有企业必须直面的时代命题。由由集团&#xff0c;作为房地产的领航者&#xff0c;始终以前瞻视野引领变革&#xff0c;坚决拥抱数字化浪潮&#xff0c;携手数字…

    自学嵌入式第27天------TCP和UDP,URL爬虫

    1. TCP和UDP区别 **TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;**是两种主要的传输层协议&#xff0c;它们在数据传输方式上有显著区别&#xff1a; 连接性&#xff1a; TCP是面向连接的协议&#xff0c;通信前需通过三次握手建立连…