<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] 元素的順序是某些集合類型的一個重要方面。例如,如果擁有相同元素的兩個列表的元素順序不同,那么這兩個列表也不相等。 在 Kotlin 中,可以通過多種方式定義對象的順序。 首先,有 _自然_ 順序。它是為 [`Comparable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparable/index.html) 接口的繼承者定義的。當沒有指定其他順序時,使用自然順序為它們排序。 大多數內置類型是可比較的: * 數值類型使用傳統的數值順序:`1` 大于 `0`; `-3.4f` 大于 `-5f`,以此類推。 * `Char` 和 `String` 使用[字典順序](https://en.wikipedia.org/wiki/Lexicographical_order): `b` 大于 `a`; `world` 大于 `hello`。 如需為用戶定義的類型定義一個自然順序,可以讓這個類型繼承 `Comparable`。 這需要實現 `compareTo()` 函數。 `compareTo()` 必須將另一個具有相同類型的對象作為參數并返回一個整數值來顯示哪個對象更大: * 正值表明接收者對象更大。 * 負值表明它小于參數。 * 0 說明對象相等。 下面是一個類,可用于排序由主版本號和次版本號兩部分組成的版本。 ```kotlin class Version(val major: Int, val minor: Int): Comparable<Version> { override fun compareTo(other: Version): Int { if (this.major != other.major) { return this.major - other.major } else if (this.minor != other.minor) { return this.minor - other.minor } else return 0 } } fun main() { println(Version(1, 2) > Version(1, 3)) println(Version(2, 0) > Version(1, 5)) } ``` _自定義_ 順序讓你可以按自己喜歡的方式對任何類型的實例進行排序。特別是,你可以為不可比較類型定義順序,或者為可比較類型定義非自然順序。如需為類型定義自定義順序,可以為其創建一個 [`Comparator`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparator/index.html)。`Comparator` 包含 `compare()` 函數:它接受一個類的兩個實例并返回它們之間比較的整數結果。如上所述,對結果的解釋與 `compareTo()` 的結果相同。 ```kotlin fun main() { //sampleStart val lengthComparator = Comparator { str1: String, str2: String -> str1.length - str2.length } println(listOf("aaa", "bb", "c").sortedWith(lengthComparator)) //sampleEnd } ``` 有了 `lengthComparator`,你可以按照字符串的長度而不是默認的字典順序來排列字符串。 定義一個 `Comparator` 的一種比較簡短的方式是標準庫中的 [`compareBy()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/compare-by.html) 函數。`compareBy()` 接受一個 lambda 表達式,該表達式從一個實例產生一個 `Comparable` 值,并將自定義順序定義為生成值的自然順序。使用 `compareBy()`,上面示例中的長度比較器如下所示: ```kotlin fun main() { //sampleStart println(listOf("aaa", "bb", "c").sortedWith(compareBy { it.length })) //sampleEnd } ``` Kotlin 集合包提供了用于按照自然順序、自定義順序甚至隨機順序對集合排序的函數。在此頁面上,我們將介紹適用于[只讀](collections-overview.html#集合類型)集合的排序函數。這些函數將它們的結果作為一個新集合返回,集合里包含了按照請求順序排序的來自原始集合的元素。如果想學習就地對[可變](collections-overview.html#集合類型)集合排序的函數,請參見 [List 相關操作](list-operations.html#排序)。 ## 自然順序 基本的函數 [`sorted()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted.html) 和 [`sortedDescending()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-descending.html) 返回集合的元素,這些元素按照其自然順序升序和降序排序。這些函數適用于 `Comparable` 元素的集合。 ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") println("Sorted ascending: ${numbers.sorted()}") println("Sorted descending: ${numbers.sortedDescending()}") //sampleEnd } ``` ## 自定義順序 為了按照自定義順序排序或者對不可比較對象排序,可以使用函數 [`sortedBy()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-by.html) 和 [`sortedByDescending()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-by-descending.html)。它們接受一個將集合元素映射為 `Comparable` 值的選擇器函數,并以該值的自然順序對集合排序。 ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") val sortedNumbers = numbers.sortedBy { it.length } println("Sorted by length ascending: $sortedNumbers") val sortedByLast = numbers.sortedByDescending { it.last() } println("Sorted by the last letter descending: $sortedByLast") //sampleEnd } ``` 如需為集合排序定義自定義順序,可以提供自己的 `Comparator`。為此,調用傳入 `Comparator` 的 [`sortedWith()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-with.html) 函數。使用此函數,按照字符串長度排序如下所示: ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") println("Sorted by length ascending: ${numbers.sortedWith(compareBy { it.length })}") //sampleEnd } ``` ## 倒序 你可以使用 [`reversed()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/reversed.html) 函數以相反的順序檢索集合。 ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") println(numbers.reversed()) //sampleEnd } ``` `reversed()` 返回帶有元素副本的新集合。因此,如果你之后改變了原始集合,這并不會影響先前獲得的 `reversed()` 的結果。 另一個反向函數——[`asReversed()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/as-reversed.html)——返回相同集合實例的一個反向視圖,因此,如果原始列表不會發生變化,那么它會比 `reversed()` 更輕量,更合適。 ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") val reversedNumbers = numbers.asReversed() println(reversedNumbers) //sampleEnd } ``` 如果原始列表是可變的,那么其所有更改都會反映在其反向視圖中,反之亦然。 ```kotlin fun main() { //sampleStart val numbers = mutableListOf("one", "two", "three", "four") val reversedNumbers = numbers.asReversed() println(reversedNumbers) numbers.add("five") println(reversedNumbers) //sampleEnd } ``` 但是,如果列表的可變性未知或者源根本不是一個列表,那么 `reversed()` 更合適,因為其結果是一個未來不會更改的副本。 ## 隨機順序 最后,[`shuffled()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/shuffled.html) 函數返回一個包含了以隨機順序排序的集合元素的新的 `List`。你可以不帶參數或者使用 [`Random`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.random/-random/index.html) 對象來調用它。 ```kotlin fun main() { //sampleStart val numbers = listOf("one", "two", "three", "four") println(numbers.shuffled()) //sampleEnd } ```
                  <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>

                              哎呀哎呀视频在线观看