一、Iterable和Iterator接口

为了更加方便的循环Collection类型的元素,仓颉提供了Iterable和Iterator接口,任何实现了Iterable接口的类型都是可迭代的,使用for-in循环,会自动处理迭代逻辑,也不需要处理Option类型的值。

package Study

main() {
    let array = [1, 2, 3, 4, 5]
    // 获取迭代器
    let iter = array.iterator()
    println(iter.next())
    println(iter.next())
    println(iter.next())
    println(iter.next())
    println(iter.next())
    println(iter.next())
}
package Study

main() {
    let array = [1, 2, 3, 4, 5]
    // 获取迭代器
    let iter = array.iterator()
    for (item in iter) {
        println(item)
    }
}

注意:迭代器是一次性的,迭代完成后,就没法在使用了。

package Study

main() {
    let array = [1, 2, 3, 4, 5]
    // 获取迭代器
    let iter = array.iterator()
    println("第一次迭代")
    for (item in iter) {
        println(item)
    }
    println("第二次迭代")
    for (item in iter) {
        println(item)
    }
}

如果第一次没有迭代完,还可以接着继续迭代。

package Study

main() {
    let array = [1, 2, 3, 4, 5]
    // 获取迭代器
    let iter = array.iterator()
    println("第一次迭代")
    for (item in iter) {
        println(item)
        if (item == 2) {
            break
        }
    }
    println("第二次迭代")
    for (item in iter) {
        println(item)
    }
}

也可以用while循环或do-while循环,但是需要手动解构值。

package Study

main() {
    let array = [1, 2, 3, 4, 5]
    // 获取迭代器
    let iter = array.iterator()
    while (true) {
        match (iter.next()) {
            case Some(item) => println(item)
            case None => break
        }
    }
}

二、函数式编程

函数式编程:接收一个或多个函数作为输入,返回一个函数作为输出。

以下函数在使用时,都需要导包

import std.collection.*

1. map函数

package Study
import std.collection.*

main() {
    let array = [1, 2, 3, 4, 5]
    let map = map<Int64, Int64>{item:Int64 => item * 2}
    let iter = map(array)
    for (item in iter) {
        println(item)
    }   
}

2. forEach函数(循环元素)

package Study
import std.collection.*

main() {
    let array = [1, 2, 3, 4, 5]
    array |> forEach<Int64>({item => println(item)})
}

3. filter函数(按照规则过滤元素)

package Study
import std.collection.*

main() {
    let array = [1, 2, 3, 4, 5]
    array |> filter<Int64>({item => item % 2 != 0}) |> forEach<Int64>({item => println(item)})
}

4. reduce函数(将所有元素归并成一个值)

package Study
import std.collection.*

main() {
    let array = [1, 2, 3, 4, 5]
    let sum = array |> reduce<Int64>({item: Int64, value: Int64 => item + value})
    println(sum)
    println(sum.getOrThrow())
}

三、小结

本章为大家详细的介绍了仓颉编程语言中Collection高级操作的内容,下一章,为大家带来Collection练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐