<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 區間介紹 區間又叫Range,在數學里,區間通常是指一類實數集合,分為開區間、閉區間、半開半閉區間。 * 開區間指的是區間邊界的兩個值不包括在內,比如(a,b); * 閉區間指的是區間邊界的兩個值包括在內,[a,b] ; * 半開半閉區間指的是開區間一邊的邊界值不包括在內,閉區間一邊的邊界值包括在內,如下面的[a,b)、(a,b] * [a,b)被稱作左閉右開區間,(a,b]被稱作左開右閉區間。 Kotlin里面,對區間的表示提供了更加方便的支持。 在Kotlin里面,區間表示相關的類有IntRange、LongRange、CharRange,相關的接口有ClosedRange。這三個類都實現了ClosedRange接口,參考截圖: ![](https://box.kancloud.cn/176c6868de5cf91f0b896933846bdeed_547x281.jpg) ## 區間表示 ### kotlin閉區間和左閉右開的表示 區間雖然分為開區間、閉區間、左開右閉區間、左閉右開。但是**Kotlin里面只支持“閉區間”和和“左閉右開”區間的表示**。**因為其實任何區間都可以轉換為“閉區間”表示和“左閉右開”表示**: | **區間** | **案例** | **閉區間表示** | **左閉右開表示** | | ------ | ------ | --------- | ---------- | | 開區間 | (1,10) | [2,9] | [2,10) | | 閉區間 | [1,10] | [1,10] | [1,11) | | 左開右閉 | (1,10] | [2,10] | [2,11) | | 左閉右開 | [1,10) | [1,9] | [1,11) | Kotlin怎么**支持閉區間表示呢?**(可以通過下面的區間表示案例來了解這四種方法的用途)?????? * 一、可以**通過IntRange、LongRange、CharRange三個類的構造方法直接構造**, IntRange、LongRange、CharRange三個類的構造方法如下: ``` IntRange(start: Int, endInclusive: Int) LongRange(start: Long, endInclusive: Long) CharRange(start: Char, endInclusive: Char) ``` * 二、也可以**通過rangeTo方法生成**,rangeTo的方法定義如下: ![](http://upload-images.jianshu.io/upload_images/7368752-70c5e3148924ca9a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >[info]PS:從下面從idea工具截圖中,我們可以看出rangeTo存在于多個包中,多個kt文件中 ![](https://box.kancloud.cn/e4859854f10580d58bb7889348ccbeee_836x614.jpg) 當然,**rangeTo方法可以被“..操作符”替代**,后面我們講了運算符重載你就會理解,現在可以先記住,下面兩種形式是等價的: ``` val range1 = start.rangeTo(end) val range2 =start..end ``` >[info] 注意:上述代碼中的start和end是對應的生成的不同區間的不同類型,比如生成IntRange則` val range1 = 2.rangeTo(9)`和`val range2 =2..9` **Kotlin怎么支持閉區間表示呢?**?????? 通過拓展方法[until](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin-ranges-index.html?lang=en)參考截圖: 出自包[kotlin.ranges](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin-ranges-index.html?lang=en)中的`_Ranges.kt`文件 ![](https://i.loli.net/2019/04/19/5cb8c0f2b0595.jpg) 通過截圖,我們看到了很多的拓展方法,我們摘取其中一個方法的具體定義給大家看看: ~~~ public infix fun Int.until(to: Byte): IntRange { return this .. (to.toInt() - 1).toInt() } ~~~ ### **區間表示案例** * 一、kotlin表示“開區間(1,10)”可以有如下4種方式,參考代碼: ~~~ fun main(args: Array<String>) { //開區間(1,10)的四種表示方法 val range11=IntRange(2,9) val range12=2.rangeTo(9) val range13=2..9 val range14=2 until 10 println(range11.toList()) println(range12.toList()) println(range13.toList()) println(range14.toList()) } ~~~ 運行結果 ``` [2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0 ``` * 二、kotlin表示“閉區間[1,10]”可以有如下方式,參考代碼: ~~~ fun main(args: Array<String>) { // 閉區間[1,10]的四種表示方法 val range21=IntRange(1,10) val range22=1.rangeTo(10) val range23=1..10 val range24=1 until 11 println(range21.toList()) println(range22.toList()) println(range23.toList()) println(range24.toList()) } ~~~ 運行結果 ``` [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Process finished with exit code 0 ``` * 三、kotlin表示“左閉右開[1,10)”可以有如下方式,參考代碼: ~~~ fun main(args: Array<String>) { //左閉右開區間[1,10)的四種表示方法 val range31=IntRange(1,9) val range32=1.rangeTo(9) val range33=1..9 val range34=1 until 10 println(range31.toList()) println(range32.toList()) println(range33.toList()) println(range34.toList()) } ~~~ 運行結果 ``` [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0 ``` * 四、kotlin表示“左開右閉(1,10]”可以有如下方式,參考代碼: ~~~ fun main(args: Array<String>) { //左開右閉區間(1,10]的四種表示方法 val range41=IntRange(2,10) val range42=2.rangeTo(10) val range43=2..10 val range44=2 until 11 println(range41.toList()) println(range42.toList()) println(range43.toList()) } ~~~ 運行結果 ``` [2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 3, 4, 5, 6, 7, 8, 9, 10] Process finished with exit code 0 ``` ### 區間遍歷 前面我們學習了如何定義區間,那**如何遍歷區間中的元素呢**? 由于Range已經實現了Iterator接口,所以可以通過for循環遍歷區間。 區間在for循環的時候,可以普通的for循環,還可以循環的時候調用step方法或者withIndex方法,參考代碼: ~~~ /** * 區間遍歷 */ fun main(args: Array<String>) { val charRange='a'..'d' println("---------普通for循環-------------") for(c in charRange){ println(c) } println("---------for循環 step-------------") for (c in charRange step 2){ println(c) } println("---------for循環 withIndex-------------") for (withIndex in charRange.withIndex()){ println("${withIndex.index} -> ${withIndex.value}") } println("---------for循環解析析構-------------") for ((index,value) in charRange.withIndex()){ println("${index}->${value}") } } ~~~ 運行結果 ``` ---------普通for循環------------- a b c d ---------for循環 step------------- a c ---------for循環 withIndex------------- 0 -> a 1 -> b 2 -> c 3 -> d ---------for循環解析析構------------- 0->a 1->b 2->c 3->d Process finished with exit code 0 ``` 除此之外,想要循環,我們還可以調用高階函數,我們后面才學高階函數,這里大家感受感受,后面再回過頭來看看,代碼如下: ~~~ fun main(args: Array<String>) { val charRange = 'a'..'d' println("----------forEach-----------") charRange.forEach() { println(it) } println("---------forEachIndexed---------") charRange.forEachIndexed { index, c -> println("$index->$c") } } ~~~ 運行結果 ``` ----------forEach----------- a b c d ---------forEachIndexed--------- 0->a 1->b 2->c 3->d Process finished with exit code 0 ``` ### 區間常見方法和屬性 前面我們通過for循環遍歷區間元素,但是我們想要獲取區間第一個元素、最后一個元素的時候,kotlin為區間都有first、start和last屬性。 ![](https://i.loli.net/2019/04/19/5cb8cd5a54d49.jpg) 想要**判斷區間是否包含某一個元素的時候,可以使用contains**,參考代碼: ~~~ fun main(args: Array<String>) { val charRange = 'a'..'d' val first = charRange.first val last = charRange.last val start = charRange.start println("第一個元素:$first") println("第一個元素:$start") println("最后一個元素:$last") println("是否包含元素a:${charRange.contains('a')}") } ~~~ 運行結果 ``` 第一個元素:a 第一個元素:a 最后一個元素:d 是否包含元素a:true Process finished with exit code 0 ``` 到現在為止,我們還不會高階函數,后續章節會詳細介紹高階函數。我們先知道,區間也可以像數組和集合一樣,可以使用大量的高階函數進行操作,參考IDEA提示截圖: ![](https://i.loli.net/2019/04/19/5cb967c47012a.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看