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

一、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和30for index in 12...30{print("index==\(index)")}
//半开区间,输出12到29,不包括30for 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 = 0while (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 inprint(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 inprint(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.rhkb.cn/news/30886.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    ctfshow做题笔记—栈溢出—pwn65~pwn68

    目录 前言 一、pwn65(你是一个好人) 二、pwn66(简单的shellcode&#xff1f;不对劲&#xff0c;十分得有十二分的不对劲) 三、pwn67(32bit nop sled)&#xff08;确实不会&#xff09; 四、pwn68(64bit nop sled) 前言 做起来比较吃力哈哈&#xff0c;自己还是太菜了&…

    Git基础之工作原理

    基础概念 git本地有三个工作区域&#xff0c;工作目录 Working Directory&#xff0c;暂存区Stage/Index和资源区Repository/Git Directory&#xff0c;如果在加上远程的git仓库就是四个工作区域 四个区域与文件交换的命令之间的关系 WorkSpace&#xff1a;工作区&#xff0c;就…

    Linux 指定命令行前后添加echo打印内容

    目录 一. 前提条件二. 通过sh脚本进行批量修改三. 通过Excel和文本编辑器进行批量转换四. 实际执行效果 一. 前提条件 ⏹项目中有批量检索文件的需求&#xff0c;如下所示需要同时执行500多个find命令 find ./work -type f -name *.java find ./work -type f -name *.html fi…

    Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据

    文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们&#xff0c;你们好呀&#xff01;今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册&#xff0c;并…

    pytorch 50 大模型导出的onnx模型优化尝试

    本博文基于Native-LLM-for-Android项目代码实现,具体做了以下操作: 1、尝试并实现将模型结构与权重零散的onnx模型进行合并,通过该操作实现了模型加载速度提升,大约提升了3倍 2、突破了onnxconverter_common 无法将llm模型导出为fp16的操作,基于该操作后将10g的权重降低到…

    Training-free Neural Architecture Search for RNNs and Transformers(预览版本)

    摘要 神经架构搜索 (NAS) 允许自动创建新的有效神经网络架构&#xff0c;为手动设计复杂架构的繁琐过程提供了替代方案。然而&#xff0c;传统的 NAS 算法速度慢&#xff0c;需要大量的计算能力。最近的研究调查了图像分类架构的无训练 NAS 指标&#xff0c;大大加快了搜索算…

    c++_二叉树的介绍

    内存模型 一.内存中有代码区&#xff1b;栈区&#xff1b;数据段 堆区 1、栈区存放了函数所有局部变量和形参&#xff1b; 它的局限在于&#xff1a;局部变量和形参的生存期&#xff1b;即函数返回后对象就会被回收 解决方案是&#xff1a;1&#xff09;使用全局变量 &…

    ②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

    Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 网关 MS-A1-5081 MS-A1-5081 网关通过 MODBUS TCP 协议与 Modbus RTU/ASCII 协议的相互转换&#xff0c;可以将 Modbus 串口设备接入 MODBUS TCP 网络…

    [网络爬虫] 动态网页抓取 — Selenium 元素定位

    &#x1f31f;想系统化学习爬虫技术&#xff1f;看看这个&#xff1a;[数据抓取] Python 网络爬虫 - 学习手册-CSDN博客 在使用 Selenium 时&#xff0c;往往需要先定位到指定元素&#xff0c;然后再执行相应的操作。例如&#xff0c;再向文本输入框中输入文字之前&#xff0c;…

    vue实现一个pdf在线预览,pdf选择文本并提取复制文字触发弹窗效果

    [TOC] 一、文件预览 1、安装依赖包 这里安装了disjs-dist2.16版本&#xff0c;安装过程中报错缺少worker-loader npm i pdfjs-dist2.16.105 worker-loader3.0.8 2、模板部分 <template><div id"pdf-view"><canvas v-for"page in pdfPages&qu…

    Java零基础入门笔记:多线程

    前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章…

    【VUE2】第三期——样式冲突、组件通信、异步更新、自定义指令、插槽

    目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …

    蓝桥杯刷题周计划(第二周)

    目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题解分…

    Redis渐进式遍历数据库

    目录 渐进式遍历 数据库 渐进式遍历 keys*可以一次性的把整个redis中所有key都获取到&#xff0c;这个操作是非常危险的&#xff0c;因为可能一下获取到太多的key&#xff0c;阻塞redis服务器。要想很好的获取到所有的key&#xff0c;又不想出现卡死的情况&#xff0c;就可以…

    一周学会Flask3 Python Web开发-使用SQLAlchemy动态创建数据库表

    锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们定义了模型&#xff0c;我们可以通过sqlalchemy对象提供的create_all()方法来映射和动态创建数据库表。 因为我们用到…

    android studio2024最新详解(完全小白)安装-运行第一个程序

    前面我用2023最新版本的&#xff0c;死活就卡在引入依赖那里卡了两天&#xff0c;俺的崩溃谁知啊&#xff01;&#xff01; 后面我就换了个思维&#xff0c;看着网上大多的教程都是基于2022或者2020的&#xff0c;我就找了个看起来非常详细的视频&#xff0c;里面的是2020的&am…

    laravel中 添加公共/通用 方法/函数

    一&#xff0c;现在app 下面创建Common目录&#xff0c;然后在创建Common.php 文件 二&#xff0c;修改composer.json文件 添加这个到autoload 中 "files": ["app/Common/Common.php"]"autoload": {"psr-4": {"App\\": &quo…

    c语言笔记 函数参数的等价(上)

    这三种写法在 C 语言中是等价的&#xff0c;因为它们都用于声明一个指向二维数组的指针&#xff0c;或者用于声明一个二维数组作为函数参数。它们的等价性源于 C 语言中数组和指针之间的密切关系。让我们逐一分析这三种写法&#xff1a; 在C语言中&#xff0c;当数组作为函数参…

    ubuntu局域网部署stable-diffusion-webui记录

    需要局域网访问&#xff0c;如下设置&#xff1a; 过程记录查看源码&#xff1a; 查看源码&#xff0c;原来修改参数&#xff1a;--server-name 故启动&#xff1a; ./webui.sh --server-name0.0.0.0 安装下载记录&#xff1a; 快速下载可设置&#xff1a; export HF_ENDPOI…

    CTFHub-FastCGI协议/Redis协议

    将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机&#xff0c;使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…