Kotlin基础入门 - for、forEach 循环

不论身处何方 for循环这种操作都随处可见,鉴于大多数Android开发都是从Java转到Kt的,所以我的思路是从Java的使用习惯来讲一些Kt 的for、forEach 循环方式

基础 for循环

for循环 一般作用于list、map数据集合,这里我直接创建了一个只读List集合

  val dataList = listOf("apple", "banana", "orange")
  val numList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)


提前了解

  //Java中获取list循环数据的方式
  dataList.get(i)
  //Java中获取数组数据的方式
  dataList[i]

  //在Kt中不论是集合还是数组都用以下方式
  dataList[i]
惯性 for循环

所谓的惯性思维,指的是从Java过渡的常规for循环思想,均是循环获取角标,然后根据角标取对应值;如下

for (int i = 0; i < list.size(); i++) { }


惯性方式1:在 Kt 中,通常使用 start .. end 来代表一段区间 ,如下就是类似Java的写法,定义一个变量,循环区间定义在 0 - List.size - 1,循环时获取list中每个索引的值

    fun basicsFor1(dataList: List<String>) {
        for (i in 0..dataList.size - 1) {
            println("basicsFor1:" + dataList[i])
        }
    }


惯性方式2:使用Ranges.kt下的until来代表循环区间,从而完成 for循环

    fun basicsFor2(dataList: List<String>) {
        for (i in 0 until dataList.size) {
            println("basicsFor2:" + dataList[i])
        }
    }


输出结果

 com.example.fordemo                  I  basicsFor1:apple
 com.example.fordemo                  I  basicsFor1:banana
 com.example.fordemo                  I  basicsFor1:orange
 com.example.fordemo                  I  basicsFor2:apple
 com.example.fordemo                  I  basicsFor2:banana
 com.example.fordemo                  I  basicsFor2:orange


有的人可能发现 dataList.size 没有-1,这样会不会造成数组越界?我们看一下 Int 的 until 扩展函数,你会发现在其内部也是封装了区间处理,故使用无忧

进阶 for循环

Look:以下俩种方式都很常用,可根据需求自行选取

进阶方式1:使用Collections .kt下的indices来代表循环区间,从而完成 for循环

    fun basicsFor3(dataList: List<String>) {
        for (i in dataList.indices) {
            println("basicsFor3:" + i)
            println("basicsFor3:" + dataList[i])
        }
    }

同上疑问,我们看一下 Collection 的 indices扩展属性,你会发现在其内部也是封装了循环区间,故亦无忧

输出结果

 com.example.fordemo                  I  basicsFor3:0
 com.example.fordemo                  I  basicsFor3:apple
 com.example.fordemo                  I  basicsFor3:1
 com.example.fordemo                  I  basicsFor3:banana
 com.example.fordemo                  I  basicsFor3:2
 com.example.fordemo                  I  basicsFor3:orange


进阶方式2:这种方式应该是最快捷的一种循环方式,从循环区间的定义到值的输出都很方便,但是如果需要角标做一些其他操作的话,并不太适合,可用上者~

    fun basicsFor4(dataList: List<String>) {
        for (i in dataList) {
            println("basicsFor4:$i")
        }
    }


输出结果

 com.example.fordemo                  I  basicsFor4:apple
 com.example.fordemo                  I  basicsFor4:banana
 com.example.fordemo                  I  basicsFor4:orange
倒序 for循环

之前的 for循环 方式都是正序的,在一些场景下我们需要倒序,故此也可以学一学

    /**
     * 倒序
     * */
    fun invertedFor(numList: List<Int>) {
        for (i in numList.size - 1 downTo 0) {
            println("invertedFor:" + numList[i])
        }
    }

没事儿看看 downTo 的源码,发现也是一个区间定义

输出结果

com.example.fordemo                  I  invertedFor:10
com.example.fordemo                  I  invertedFor:9
com.example.fordemo                  I  invertedFor:8
com.example.fordemo                  I  invertedFor:7
com.example.fordemo                  I  invertedFor:6
com.example.fordemo                  I  invertedFor:5
com.example.fordemo                  I  invertedFor:4
com.example.fordemo                  I  invertedFor:3
com.example.fordemo                  I  invertedFor:2
com.example.fordemo                  I  invertedFor:1


————————————————
版权声明:本文为CSDN博主「远方那座山」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20451879/article/details/128580850

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值