不同开发语言之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
可以用于数组或字符串,但它会遍历所有可枚举属性,包括原型链上的属性,可能会导致意外行为。对于数组或字符串,更推荐使用 for
、for...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}')
相关文章:

不同开发语言之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 …...

CentOS 7 aarch64上制作kernel rpm二进制包 —— 筑梦之路
环境说明 centos 7 aarch64 gcc 8.3.1 kernel 5.4.290 准备编译制作 # 安装必要的工具和包yum install rpm-devel rpmdevtools yum groupinstall "Development Tools"yum install ncurses-devel bc elfutils-libelf-devel openssl-devel # 安装gcc 8.3.1# 修改…...

Cursor 使用经验,一个需求开发全流程
软件开发中 Cursor 的使用经验成为关注焦点,尤其是处理大型数据集的需求。用户提到“Cursor 使用经验,一个需求开发全流程”,但“Cursor”可能指数据库游标,涉及逐行处理数据。本文将详细探讨开发一个需求的完整流程,包…...

2025-03-08 学习记录--C/C++-PTA 习题9-2 计算两个复数之积
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>struct complex{int real;int imag; …...

DeepSeek-R1本地化部署(Mac)
一、下载 Ollama 本地化部署需要用到 Ollama,它能支持很多大模型。官方网站:https://ollama.com/ 点击 Download 即可,支持macOS,Linux 和 Windows;我下载的是 mac 版本,要求macOS 11 Big Sur or later,Ol…...

【时时三省】(C语言基础)赋值语句
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值语句 在C程序中,最常用的语句是:赋值语句和输入输出语句。其中最基本的是赋值语句程序中的计算功能大部分是由赋值语句实现的,几乎每一个有实用价值的程序都包括赋值语句。有的程序中的大部分语句都是赋值…...

如何提取图片文字
如何分析图片风格: 分析下图片是什么风格,用即梦AI的提示语描述。我要使用描述语去即梦生成同样的图...

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

BGP 基本配置实验
实验拓扑 实验需求 按照图示配置 IP 地址,R1 和 R5 上使用环回口模拟业务网段,R2,R3,R4 的环回口用于配置 Router-id 和建立 IBGP 邻居AS 200 运行 OSPF 实现内部网络互通R1,R2,R4,R5 运行 BGP…...

关于 QPalette设置按钮背景未显示出来 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146047054 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

## DeepSeek写水果记忆配对手机小游戏
DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…...

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS
P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿,判断每一块陆地是否会沉没。对于这种图的遍历,我们首先应该想到DFS。 代码的注意思想就是,在主函数中遍历找出所有岛屿,…...

opentitan riscv
OpenTitan是一个开源的硅根信任(Root of Trust, RoT)项目,旨在使硅RoT的设计和实现更加透明、可信和安全,适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理,作为一个协作项目,旨在生产高质量…...

数据结构篇——串(String)
一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串(s…...

Linux系统重置密码
当root账号忘记密码时,如何重置密码?下面有两种方法可以解决该问题: 重置root密码 1.方法一、rd.break命令 第一步 重启系统,在下图所示界面中按e,进入编辑模式----一定要快速按,否则6秒后就会到登陆界面…...

Flow Matching 和 Rectified Flow的区别
Flow Matching是通过匹配目标向量场来训练CNF,比如通过最小化目标向量场和模型预测之间的差异。 Rectified Flow的核心思想是学习一个确定性轨迹,将数据分布转换为噪声分布,比如通过线性插值或者更复杂的路径。 推荐阅读: SD3的采…...

机器学习编译
一、机器学习概述 1.1 什么是机器学习编译 将机器学习算法从开发形态通过变换和优化算法使其变成部署形态。即将训练好的机器学习模型应用落地,部署在特定的系统环境之中的过程。 开发形态:开发机器学习模型时使用的形态。Pytorch,TensorFlow等通用框…...

什么是 BotGate 动态防护?
随着网络威胁日益复杂,传统的防护方法逐渐暴露出漏洞。BotGate 动态防护是一种结合机器人网络(Botnet)和动态防护技术的新兴网络安全模式。它利用大量分布式设备(即“僵尸网络”或 Botnet)的实时协作能力,快…...

Linux笔记---自定义shell
目录 前言 1. 程序框架 2. 打印命令行提示符 2.1 获取用户名(GetUserName) 2.2 获取主机名(GetHostName) 2.3 获取工作目录(GetPwd) 3. 获取命令行输入 4. 判断是否有重定向 5. 解析命令行 6. 内建命令 6.1 内建命令的特点 6.2 常见内建命令 6.3 内建命令 vs 外部命…...

大语言模型从理论到实践(第二版)-学习笔记(绪论)
大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型,由函数 P(w1w2 wm) 表示,可以形式化地构建为词序列 w1w2 wm 的概率分布,表示词序列 w1w2 wm…...

2025-03-08 学习记录--C/C++-C 语言 判断一个数是否是完全平方数
C 语言 判断一个数是否是完全平方数 使用 sqrt 函数计算平方根,然后判断平方根的整数部分是否与原数相等。 #include <stdio.h> #include <math.h>int isPerfectSquare(int num) {if (num < 0) {return 0; // 负数不是完全平方数}int sqrtNum (int)…...

八、排序算法
一些简单的排序算法 8.1 冒泡排序 void Bubble_sort(int a[] , int len){int i,j,flag,tmp;for(i=0 ; i < len-1 ; i++){flag = 1;for(j=0 ; j < len-1-i ; j++){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 0;}}if(flag == 1){break;}}…...

计算机网络篇:基础知识总结与基于长期主义的内容更新
基础知识总结 和 MySQL 类似,我同样花了一周左右的时间根据 csview 对计算机网络部分的八股文进行了整理,主要的内容包括:概述、TCP 与 UDP、IP、HTTP,其中我个人认为最重要的是 TCP 这部分的内容。 在此做一篇目录索引…...

nodejs学习——nodejs和npm安装与系统环境变量配置及国内加速
nodejs和npm安装与系统环境变量配置及国内加速 下载node-v22.14.0-x64.msi 建议修改为非C盘文件夹 其它步骤,下一步,下一步,完成。 打开CMD窗口查看安装详情 $ node -v v22.14.0 $ npm -v 10.9.2$ npm config list创建node_global和node_c…...

《打造视频同步字幕播放网页:从0到1的技术指南》
《打造视频同步字幕播放网页:从0到1的技术指南》 为什么要制作视频同步字幕播放网页 在数字化信息飞速传播的当下,视频已然成为内容输出与获取的核心载体,其在教育、娱乐、宣传推广等诸多领域发挥着举足轻重的作用 。制作一个视频同步字幕播…...

清华大学第八弹:《DeepSeek赋能家庭教育》
大家好,我是吾鳴。 之前吾鳴给大家分享过清华大学出版的七份报告,它们分别是: 《DeepSeek从入门到精通》 《DeepSeek如何赋能职场应用》 《普通人如何抓住DeepSeek红利》 《DeepSeekDeepResearch:让科研像聊天一样简单》 《D…...

自我训练模型:通往未来的必经之路?
摘要 在探讨是否唯有通过自我训练模型才能掌握未来的问题时,文章强调了底层技术的重要性。当前,许多人倾向于关注应用层的便捷性,却忽视了支撑这一切的根本——底层技术。将模型简单视为产品是一种短视行为,长远来看,理…...

C++ Primer 交换操作
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

深度学习模型组件之优化器--自适应学习率优化方法(Adadelta、Adam、AdamW)
深度学习模型组件之优化器–自适应学习率优化方法(Adadelta、Adam、AdamW) 文章目录 深度学习模型组件之优化器--自适应学习率优化方法(Adadelta、Adam、AdamW)1. Adadelta1.1 公式1.2 优点1.3 缺点1.4 应用场景 2. Adam (Adaptiv…...

使用jcodec库,访问网络视频提取封面图片上传至oss
注释部分为FFmpeg(确实方便但依赖太大,不想用) package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…...