不同开发语言之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…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...

