不同開發語言之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.pswp.cn/web/71555.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/web/71555.shtml
    英文地址,請注明出處:http://en.pswp.cn/web/71555.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    計算機畢設-基于springboot的物業管理系統的設計與實現(附源碼+lw+ppt+開題報告)

    博主介紹&#xff1a;?多個項目實戰經驗、多個大型網購商城開發經驗、在某機構指導學員上千名、專注于本行業領域? 技術范圍&#xff1a;Java實戰項目、Python實戰項目、微信小程序/安卓實戰項目、爬蟲大數據實戰項目、Nodejs實戰項目、PHP實戰項目、.NET實戰項目、Golang實戰…

    景聯文科技:以精準數據標注賦能AI進化,構筑智能時代數據基石

    在人工智能技術席卷全球的浪潮中&#xff0c;高質量數據已成為驅動AI模型進化的核心燃料。作為全球領先的AI數據服務解決方案提供商&#xff0c;景聯文科技深耕數據標注領域多年&#xff0c;以技術為基、以專業為本&#xff0c;致力于為全球客戶提供全場景、高精度、多模態的數…

    批量合并 Word 文檔,支持合并成一個 Word,也支持按文件夾合并

    我們經常會碰到需要將多個 Word 文檔批量合并成一個 Word 文檔的場景&#xff0c;比如需要合并后打印、合并后方便整理存檔等等。如果是人工的操作&#xff0c;會非常的麻煩。因此我們通常會借助一些批量處理腳本或者尋找批量處理的工具來幫我們實現批量合并 Word 文檔的操作。…

    數據安全基石:備份文件的重要性與自動化實踐

    在數字化時代&#xff0c;數據已成為企業和個人不可或缺的重要資產。無論是企業的運營數據、客戶資料&#xff0c;還是個人的學習資料、家庭照片&#xff0c;這些數據都承載著巨大的價值。然而&#xff0c;數據的安全問題也日益凸顯&#xff0c;硬件故障、軟件錯誤、人為失誤以…

    用IdleHandler來性能優化及原理源碼分析

    背景&#xff1a; 經常在做一些app冷啟動速度優化等性能優化工作時候&#xff0c;經常可能會發現有時候需要引入一些第三方sdk&#xff0c;或者庫&#xff0c;這些庫一般會要求我們在onCreate中進行初始化等&#xff0c;但是onCreate屬于生命周期的回調方法&#xff0c;如果on…

    SyntaxError: Invalid or unexpected token in JSON at position x

    &#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

    04.基于C++實現多線程TCP服務器與客戶端通信

    基于C實現多線程TCP服務器與客戶端通信 目錄 一、項目背景與目標二、從零開始理解網絡通信三、相關技術背景知識 1. 守護進程(Daemon Process)2. 線程池(Thread Pool)3. RAII設計模式 四、項目整體結構與邏輯五、核心模塊詳細分析 1. TCP服務器模塊2. 線程池模塊3. 任務處理模…

    從0到1入門Linux

    一、常用命令 ls 列出目錄內容 cd切換目錄mkdir創建新目錄rm刪除文件或目錄cp復制文件或目錄mv移動或重命名文件和目錄cat查看文件內容grep在文件中查找指定字符串ps查看當前進程狀態top查看內存kill終止進程df -h查看磁盤空間存儲情況iotop -o直接查看比較高的磁盤讀寫程序up…

    Nginx負載均衡配置詳解:輕松實現高可用與高性能

    在現代Web應用中&#xff0c;負載均衡是確保系統高可用性和高性能的關鍵技術之一。Nginx作為一款高性能的HTTP服務器和反向代理服務器&#xff0c;其負載均衡功能被廣泛應用于各種場景。本文將詳細介紹如何使用Nginx實現負載均衡配置&#xff0c;幫助開發者輕松應對高并發和大流…

    使用chroot預安裝軟件到ubuntu22中

    1、安裝依賴 # 安裝依賴工具 sudo apt update && sudo apt install -y \ squashfs-tools \ genisoimage \ xorriso \ isolinux \ syslinux-utils \ p7zip-full sudo apt update sudo apt install grub-pc-bin grub-efi-amd64-bin -y # 創建工作目錄 mkdir -p ./custom-…

    php代碼審計工具-rips

    代碼審計 代碼審計就是檢查所寫的代碼中是否有漏洞&#xff0c;檢查程序的源代碼是否有權限從而被黑客攻擊&#xff0c;同時也檢查了書寫的代碼是否規范。通過自動化的審查和人工審查的方式&#xff0c;逐行檢查源代碼&#xff0c;發現源代碼中安全缺陷所造成的漏洞&#xff0…

    Docker參數,以及倉庫搭建

    一。Docker的構建參數 注釋&#xff1a; 1.對于CMD&#xff0c;如果不想顯示&#xff0c;而是使用交互界面&#xff1a;docker run -ti --rm --name test2 busybox:v5 sh 2.對于CMD&#xff0c;一個交互界面只可以使用一個&#xff0c;如果想多次使用CMD&#xff0c;則用ENTR…

    基于Python Django的人臉識別上課考勤系統(附源碼,部署)

    博主介紹&#xff1a;?程序員徐師兄、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;…

    基于python實現的疫情數據可視化分析系統

    基于python實現的疫情數據可視化分析系統 開發語言:Python 數據庫&#xff1a;MySQL所用到的知識&#xff1a;Django框架工具&#xff1a;pycharm、Navicat 系統功能實現 總體設計 系統實現 系統功能模塊 系統首頁可以查看首頁、疫情信息、核酸檢測、新聞資訊、個人中心、后…

    (十 八)趣學設計模式 之 觀察者模式!

    目錄 一、 啥是觀察者模式&#xff1f;二、 為什么要用觀察者模式&#xff1f;三、 觀察者模式的實現方式四、 觀察者模式的優缺點五、 觀察者模式的應用場景六、 總結 &#x1f31f;我的其他文章也講解的比較有趣&#x1f601;&#xff0c;如果喜歡博主的講解方式&#xff0c;…

    Spring Boot 緩存最佳實踐:從基礎到生產的完整指南

    Spring Boot 緩存最佳實踐&#xff1a;從基礎到生產的完整指南 引言 在現代分布式系統中&#xff0c;緩存是提升系統性能的銀彈。Spring Boot 通過 spring-boot-starter-cache? 模塊提供了開箱即用的緩存抽象&#xff0c;但如何根據業務需求實現靈活、可靠的緩存方案&#xf…

    蘋果Siri升級遇阻,國行iPhone或將引入阿里、百度AI自救

    AI整合進展緩慢 蘋果正加速將生成式AI技術整合至Siri&#xff0c;但內部消息稱其底層技術研發落后于競爭對手&#xff0c;進展未達預期。 國行iPhone將引入雙AI模型 蘋果計劃在2025年中期為國行iPhone引入AI功能&#xff0c;目前已敲定與 阿里巴巴、百度 合作&#xff0c;用戶…

    阿里推出全新推理模型(因果語言模型),僅1/20參數媲美DeepSeek R1

    阿里Qwen 團隊正式發布了他們最新的研究成果——QwQ-32B大語言模型&#xff01;這款模型不僅名字萌萌噠(QwQ)&#xff0c;實力更是不容小覷&#xff01;&#x1f60e; QwQ-32B 已在 Hugging Face 和 ModelScope 開源&#xff0c;采用了 Apache 2.0 開源協議。大家可通過 Qwen C…

    TomcatServlet

    https://www.bilibili.com/video/BV1UN411x7xe tomcat tomcat 架構圖&#xff0c;與 jre&#xff0c;應用程序之前的關系 安裝使用 tomcat 10 開始&#xff0c;api 從 javax.* 轉為使用 jakarta.*&#xff0c;需要至少使用 jdk 11 cmd 中默認 gbk 編碼&#xff0c;解決控制…

    JDK ZOOKEEPER KAFKA安裝

    JDK17下載安裝 mkdir -p /usr/local/develop cd /usr/local/develop 將下載的包上傳服務器指定路徑 解壓文件 tar -zxvf jdk-17.0.14_linux-x64_bin.tar.gz -C /usr/local/develop/ 修改文件夾名 mv /usr/local/develop/jdk-17.0.14 /usr/local/develop/java17 配置環境變量…