Làm cách nào để tạo Mảng giống như chúng ta làm trong java?
int A[] = new int[N];
Làm thế nào tôi có thể làm điều này trong Kotlin?
Làm cách nào để tạo Mảng giống như chúng ta làm trong java?
int A[] = new int[N];
Làm thế nào tôi có thể làm điều này trong Kotlin?
Câu trả lời:
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
, DoubleArray
v.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
, false
cho Boolean
.
Mảng không nguyên thủy được đại diện bởi Array<T>
lớp, ở đó T
là kiểu mục.
T
vẫ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
, Double
v.v.
Ngoài ra, T
có thể là cả nullable và không null như String
và String?
.
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 }
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ử.
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, x
sẽ được lấy từ chỉ mục 0, y
từ chỉ mục 1, v.v.
int
, nhưng đối với Đối tượng, có stackoverflow.com/questions/32679060/…