Làm cách nào để tạo một mảng trong Kotlin giống như trong Java chỉ bằng cách cung cấp một kích thước?


Câu trả lời:


154

Theo tham chiếu , các mảng được tạo theo cách sau:

  • Đối với các kiểu nguyên thủy của Java, có các kiểu riêng biệt IntArray, DoubleArrayv.v. lưu trữ các giá trị không được đóng hộp .

    Chúng được tạo bằng các hàm tạo và hàm nhà máy tương ứng:

    val arrayOfZeros = IntArray(size) //equivalent in Java: new int[size]
    val numbersFromOne = IntArray(size) { it + 1 }
    val myInts = intArrayOf(1, 1, 2, 3, 5, 8, 13, 21)
    

    Cái đầu tiên là mô phỏng cho điều đó trong Java, nó chỉ tạo ra một mảng nguyên thủy chứa đầy giá trị mặc định, ví dụ: 0 cho Int, falsecho Boolean.

  • Mảng không nguyên thủy được đại diện bởi Array<T>lớp, ở đó Tlà kiểu mục.

    Tvẫn có thể là một trong các kiểu nguyên thủy trong Java ( Int,, Boolean...), nhưng các giá trị bên trong sẽ được đóng hộp tương đương với Java Integer, Doublev.v.

    Ngoài ra, Tcó thể là cả nullable và không null như StringString?.

    Chúng được tạo theo cách tương tự:

    val nulls = arrayOfNulls<String>(size) //equivalent in Java: new String[size]
    val strings = Array(size) { "n = $it" } 
    val myStrings = arrayOf("foo", "bar", "baz")
    
    val boxedInts = arrayOfNulls<Int>(size) //equivalent in Java: new Integer[size]
    val boxedZeros = Array(size) { 0 }
    

16
Array<Int>(size)không biên dịch. Đó là bởi vì bạn không thể tạo một mảng không thể nullable mà không cung cấp các phần tử.
Kirill Rakhman

2
@KirillRakhman, cảm ơn vì nhận xét của bạn, đó là một sai lầm vô tình. Đã sửa.
phím nóng

0

Trong Kotlin, việc tạo IntArray có kích thước N rất đơn giản. Sử dụng IntArray(n)hoặc loại thích hợp, được nêu chi tiết kỹ lưỡng trong câu trả lời của phím nóng.

Khi sử dụng mảng kích thước cố định của bạn, bạn có thể sử dụng Kotlin Dest Structure

// Create fixed sized array
val point = IntArray(2)

// Access values directly
val (x, y) = point

Trong trường hợp này, xsẽ được lấy từ chỉ mục 0, ytừ chỉ mục 1, v.v.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.