天天看点

Kotlin学习笔记十五、关于“区间Range”的补充

这部分没什么太多的文字解释,因此直接上代码,通过代码在注释里面更直观的说明:

//創建一個前後都是閉合的閉區間,沒有指定步長step,所以默認步長為1
var intRange = 1..10
var charRange = 'a'..'z'
var longRange = 1L..10L
var floatRange = 1f..2f
var doubleRange = 1.0..2.0
println("前後都是閉合的閉區間:" +
        "\n${intRange.joinToString()} " +
        "\n${charRange.joinToString()} " +
        "\n${longRange.joinToString()} " +
        "\n$floatRange\n$doubleRange")
println("前後都是閉合的閉區間的joinToString()方法:${
    intRange.joinToString {
        it.toString()
    }
}")
println("\n\n")

//創建一個前後都是閉合的閉區間,指定步長step為指定的值。、
var intRangeStep = 1..12 step 1
var charRangeStep = 'a'..'z' step 2
var longRangeStep = 1L..15L step 3
//float浮點類型/double雙精度類型(小数)沒有步長的定義
println("前後都是閉合的閉區間,步長分別爲1、2、3:" +
        "\n${intRangeStep.joinToString()} " +
        "\n${charRangeStep.joinToString()} " +
        "\n${longRangeStep.joinToString()}")
println("前後都是閉合的閉區間的joinToString()方法:${
    intRangeStep.joinToString {
        it.toString()
    }
}")
println("\n\n")

//創建一個前閉後開的區間:
var openCloseIntRaange = 1 until 11 step 2
var openCloseCharRaange = 'a' until 's' step 2
var openCloseLongRaange = 1L until 21L step 2L
//float浮點類型/double雙精度類型(小数)沒有前閉後開的定義
println("前閉後開的區間,步长为2:" +
        "\n${openCloseIntRaange.joinToString()} " +
        "\n${openCloseCharRaange.joinToString()} " +
        "\n${openCloseLongRaange.joinToString()}")
println("前閉後開的區間的joinToString()方法:${
    openCloseCharRaange.joinToString {
        it.toString()
    }
}")
println("\n\n")

//上面是按照升序的方式下面我們來看看降序(倒序)區間的創建:
var intRangeDescend = 10 downTo 1 step 1
var charRangeDescend = 'z' downTo 'b' step 3
var longRangeDescend = 38L downTo 1L step 5
//float浮點類型/double雙精度類型(小数)沒有降序(倒序)區間的定义
println("降序(倒序)區間的創建:" +
        "\n${intRangeDescend.joinToString()} " +
        "\n${charRangeDescend.joinToString()} " +
        "\n${longRangeDescend.joinToString()}")
println("降序(倒序)區間的joinToString()方法:${
    charRangeDescend.joinToString {
        it.toString()
    }
}")

// 另外,不仅区间有joinToString()方法,数组也有joinToString()方法。
// 另外,区间的迭代跟数组的迭代方式一样,都是通过for循环以及iterator迭代器实现,
// 主要有以下三种方式:
// for -- in方式
for (item in charRangeDescend) {
    println("for循环迭代区间charRangeDescend:$item")
}
// forEach方式
charRangeDescend.forEach {
    println("forEach迭代区间charRangeDescend:$it")
}
// iterator迭代循环方式
var iterator = charRangeDescend.iterator()
while (iterator.hasNext()) {
    //iteratorNext.next()的next()方法内部调用的就是extChar()方法
    println("迭代器迭代区间charRangeDescend--nextChar:${iterator.nextChar()}")
}

// 区间的包含关系:判断某个区间是否包含指定的对象,我们还是用关键字“in”来判断,
// 这点跟java使用contains()方法类似的。
if('k' in charRangeDescend){
    println("charRangeDescend区间包含K对象")
}