美文网首页
每天学一点 Kotlin -- 集合:Array 数组

每天学一点 Kotlin -- 集合:Array 数组

作者: 冯可乐同学 | 来源:发表于2021-11-04 10:45 被阅读0次

----《第一季Kotlin崛起:次世代Android开发 》学习笔记

总目录:每天学一点 Kotlin ---- 目录
上一篇:每天学一点 Kotlin -- 高阶函数
下一篇:每天学一点 Kotlin -- 集合:MutableList

1. 集合类型 Collection

1.1 根据集合类型的整体特性,Kotlin 中分为3种集合:
(1) 有序可重复: Array -- 数组
(2) 有序不重复: Set
(3) 无序不重复: Map

2. Array 数组

2.1 数组是一个最常用的 Collection 类型。Kotlin 默认推荐使用 Array 类型。

2.2 Array 完整定义

Array<类型>  或  arrayOf(元素1, 元素2, .... 元素n)

2.3 特点: 一旦定义后,则数组中元素的类型不可改变,数组的大小也不可改变

3. 数组的使用:

3.1 举个栗子1:

fun main(args: Array<String>) {

    val arr1: Array<Int> = arrayOf(1, 2, 3, 4, 5, 6)

    val arr2  = arrayOf(1, 2, 3, 4, 5, 6)

    println("arr1.size = " + arr1.size)
    println("arr1.count() = " + arr1.count())

    println("arr1 -- 1 = " + arr1.first())
    println("arr1 -- 1 = " + arr1.component1())
    println("arr1 -- 2 = " + arr1.component2())
    println("arr1 -- 3 = " + arr1.component3())
    println("arr1 -- 4 = " + arr1.component4())
    println("arr1 -- 5 = " + arr1.component5())
    println("arr1 -- 6 = " + arr1[5])
    println("arr1 -- 6 = " + arr1.last())
}

打印结果:

arr1.size = 6
arr1.count() = 6
arr1 -- 1 = 1
arr1 -- 1 = 1
arr1 -- 2 = 2
arr1 -- 3 = 3
arr1 -- 4 = 4
arr1 -- 5 = 5
arr1 -- 6 = 6
arr1 -- 6 = 6

3.2 注意:
(1) arr1.first() 和arr1.component1() 等价
(2) component1() 这个函数在 Kotlin 中只提供了5个,其他的要用下标来获取

3.3 数组的一些其他内置函数:
(1) 检查包含是否某个元素: contains方法
(2) 丢弃元素系列:drop, dropWhile 和 dropLast, dropLastWhile
(3) 查找模式: find
(4) 把整个数组中的元素中间加逗号输出:joinToString, 当然也可以加以定制
(5) 取出元素系列:take, takeLast 和 drop, dropLast
(6) 切割数组:sliceArray
(7) 反转数组:reverse
(8) 数组排序:sortedArray 和 sortedArrayDescending, 加强版排序:sortedBy 和 sortedByDescending
(9) 数组变形: map -- 可以把一种数组转换成另一种类型
(10) 筛选器: filter
(11) 最大和最小: max 和 min
举个栗子2:

fun main() {
//    testArray01()
//    testArray02()
//    testArray03()
//    testArray04()
//    testArray05()
//    testArray06()
//    testArray07()
//    testArray08()
//    testArray09()
//    testArray10()
    testArray11()
}

val arr = arrayOf("C/C++", "Java", "Kotlin", "Python", "北京", "上海", "杭州", "从北京到杭州再到上海")
val numbers = arrayOf(0, -99, 99, 30, 78, 11)

fun testArray11() {
    // (11) 最大和最小: max 和 min
    println("numbers.minOrNull() = " + numbers.minOrNull())
    println("numbers.maxOrNull() = " + numbers.maxOrNull())
}

fun testArray10() {
    // (10) 筛选器: filter
    var numTemp = numbers.sliceArray(0..numbers.size - 1)
    println("numTemp.filter = " + numTemp.filter { it > 20 })
}

val nameString = { msg: String -> "我是:" + msg }
val printString = { msg: String -> println(msg) }

fun testArray09() {
    // (9) 数组变形: map -- 可以把一种数组转换成另一种类型
    var arrTemp = arr.sliceArray(0..arr.size - 1)
    arrTemp.map(printString)

    arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.map = " + arrTemp.map(nameString))

    var numTemp = numbers.sliceArray(0..numbers.size - 1)
    println("\n\nnumTemp.map = " + numTemp.map { it -> "数字:${it}" })
}

fun testArray08() {
    // (8) 数组排序:sortedArray 和 sortedArrayDescending, 加强版排序:sortedBy 和 sortedByDescending
    var numTemp = numbers.sliceArray(0..numbers.size - 1)
    println(numTemp.sort())
    println("numTemp.sort = " + numTemp.joinToString())

    numTemp = numbers.sliceArray(0..numbers.size - 1)
    println("\nnumTemp.sortedArray = " + numTemp.sortedArray().joinToString())

    numTemp = numbers.sliceArray(0..numbers.size - 1)
    println("\nnumTemp.sortedArrayDescending = " + numTemp.sortedArrayDescending().joinToString())

    var arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.sortedBy 11 = " + arrTemp.sortedBy { s -> s.length })
    println("arrTemp.sortedBy 22 = " + arrTemp.sortedBy { it.length })

    arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.sortedByDescending 11 = " + arrTemp.sortedByDescending { s -> s.length })
    println("arrTemp.sortedByDescending 22 = " + arrTemp.sortedByDescending { it.length })
}

fun testArray07() {
    // (7) 反转数组:reverse
    var arrTemp = arr.sliceArray(0..arr.size - 1)
    println("arrTemp.reverse = " + arrTemp.reverse())
    println("arrTemp = " + arrTemp.joinToString())
    println("arr = " + arr.joinToString())

    arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.reverse(x,y) = " + arrTemp.reverse(2, 5))
    println("arrTemp = " + arrTemp.joinToString())
    println("arr = " + arr.joinToString())

    arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.reversed = " + arrTemp.reversed())
    println("arr = " + arr.joinToString())

    arrTemp = arr.sliceArray(0..arr.size - 1)
    println("\n\narrTemp.reversedArray = " + arrTemp.reversedArray().joinToString())
    println("arr = " + arr.joinToString())
}

fun testArray06() {
    // (6) 切割数组:sliceArray
    println("arr.sliceArray = " + arr.sliceArray(2..5).joinToString())
    println("arr = " + arr.joinToString())
}

fun testArray05() {
    // (5) 取出元素系列:take, takeLast 和 drop, dropLast
    println("arr.take = " + arr.take(3))
    println("arr.takeLast = " + arr.takeLast(3))
    println("arr.drop = " + arr.drop(3))
    println("arr.dropLast = " + arr.dropLast(3))

    println("arr.get(3) = " + arr.get(3))
    println("arr = " + arr.joinToString())
}

fun testArray04() {
    // (4) 把整个数组中的元素中间加逗号输出:joinToString, 当然也可以加以定制
    println(arr.joinToString())

    println(arr.joinToString { "选项:${it}" })
}

fun testArray03() {
    // (3) 查找模式: find
    println(arr.find { it.contains("o") })
    println(arr.findLast { it.contains("o") })
}

fun testArray02() {
    // (2) 丢弃元素系列:drop, dropWhile 和 dropLast, dropLastWhile
    var arrTemp = arr;
    println("arrTemp.drop = " + arrTemp.drop(3))
    println("arr = " + arr.joinToString())

    arrTemp = arr
    println("arr1.dropLast = " + arrTemp.dropLast(3))
    println("arr = " + arr.joinToString())

    arrTemp = arr
    println("arrTemp.dropWhile = " + (arrTemp.dropWhile { it == "C/C++" || it.contains("Java") }))
    println("arr = " + arr.joinToString())

    arrTemp = arr
    println("arrTemp.dropLastWhile = " + (arrTemp.dropLastWhile { it == "从北京到杭州再到上海" || it == "杭州" }))
    println("arr = " + arr.joinToString())
}

fun testArray01() {
    // (1) 检查包含是否某个元素: contains方法
    println(arr.contains("Kotlin"))
    println(arr.contains("上海"))
}

数组内置的还有很多方法,在以后的使用慢慢探索。

相关代码:https://gitee.com/fzq.com/test-demo

相关文章

网友评论

      本文标题:每天学一点 Kotlin -- 集合:Array 数组

      本文链接:https://www.haomeiwen.com/subject/mtytaltx.html