[polldaddy poll=9764234]
Với Kotlin thì Mảng là một kiểu dữ liệu rất mạnh mẽ, nó khắc phục được rất nhiều nhược điểm so với các ngôn ngữ lập trình khác như C++, C#, Java…
Ở bài số 6 Tui đã nói sơ qua một số kiểu dữ liệu là mảng được built-in sẵn trong Kotlin. Để giúp các bạn dễ dàng hiểu được cách khai báo cũng như sử dụng mảng một chiều trong Kotlin thì Tui sẽ dùng IntArray để minh họa trong các ví dụ dưới đây, các kiểu mảng khác các bạn có thể tự suy luận được.
Để khai báo và cấp phát mảng ta làm như sau:
var M:IntArray= IntArray(n)
Với n là số phần tử lưu trữ tối đa của mảng.
M là một mảng lưu trữ tập các kiểu dữ liệu Int (lưu trữ tối đa n phần tử). Ta cũng có thể nói M là một đối tượng có kiểu IntArray. Tương tự như các ngôn ngữ lập trình khác, Mảng cũng lưu chỉ số từ 0, cho phép truy suất các phần tử thông qua chỉ số:
Nhưng các bạn cần chú ý là việc truy suất phần tử chỉ là một chức năng vô cùng nhỏ trong mảng của Kotlin, vì với Mảng trong Kotlin nó rất phong phú các phương thức, nó là một đối tượng được xây dựng với vô vàn phương thức xử lý rất hiệu quả: Tìm min, max, trung bình, tổng, tìm kiếm, sắp xếp…
Tui liệt kê một số thuộc tính và phương thức thường dùng của Mảng (dĩ nhiên còn rất nhiều phương thức khác, khi nào gặp thì các bạn nghiên cứu thêm):
Tên Thuộc tính/phương thức | Mô tả |
size | Thuộc tính trả về kích thước thực sự của mảng |
[i] | Indexer cho phép truy suất và thay đổi giá trị tại vị trí i của mảng |
count/count{} | đếm/ đếm có điều kiện |
min() | hàm trả về số nhỏ nhất trong mảng |
max() | hàm trả về số lớn nhất trong mảng |
sum() | hàm trả về tổng mảng |
average() | hàm trả về trung bình mảng |
sort() | sắp xếp mảng tăng dần |
sortDescending() | sắp xếp mảng giảm dần |
filter{} | Tìm kiếm/lọc danh sách trong mảng |
reverse() | Đảo mảng |
contains() | Kiểm tra Mảng có chứa phần tử nào đó hay không |
Ví dụ khai báo mảng M có khả năng chứa tối đa 10 phần tử:
var M:IntArray= IntArray(10)
Nhập giá trị cho từng phần tử trong mảng M:
M[0]=100
M[1]=20
…
…
M[9]=-5
Vì mảng M có khả năng chứa 10 phần tử nên các Indexer sẽ chạy từ 0 –> 9
Để lấy giá trị tại một vị trí bất kỳ:
var x:Int=M[2]
Để duyệt các phần tử trong mảng ta có thể duyệt theo vị trí như sau:
for (i in M.indices)
print(“${M[i]}\t”)
hoặc duyệt giá trị theo cách:
for (i in M)
print(“$i\t”)
Các hàm khác trong mảng cũng dễ dàng thực hiện.
Ví dụ chi tiết tạo mảng M có 10 phần tử với các giá trị ngẫu nhiên:
[code language=”groovy”]
import java.util.*
/**
* Created by cafe on 28/05/2017.
*/
fun main(args: Array) {
var M:IntArray= IntArray(10)
var rd=Random()
for(i in M.indices)
M[i]=rd.nextInt(100)//nhập giá trị là các số ngẫu nhiên [0..99]
println(“Mảng sau khi nhập – duyệt theo giá trị:”)
for (i in M)
print(“$i\t”)
println()
println(“Mảng sau khi nhập – duyệt theo vị trí:”)
for (i in M.indices)
print(“${M[i]}\t”)
println()
//số lớn nhất
println(“MAX=${M.max()}”)
//số nhỏ nhất
println(“MIN=${M.min()}”)
//tổng mảng
println(“SUM=${M.sum()}”)
//trung bình mảng
println(“AVERAGE=${M.average()}”)
//đếm số chẵn
println(“Số chẵn=${M.count { x->x%2==0 }}”)
//đếm số lẻ
println(“Số lẻ=${M.count { x->x%2==1 }}”)
//sắp xếp tăng dần
M.sort()
println(“Tăng dần:”)
for (i in M)
print(“$i\t”)
println()
//sắp xếp giảm dần
M.sortDescending()
println(“Giảm dần:”)
for (i in M)
print(“$i\t”)
println()
//lọc các số chẵn trong mảng
var dsChan= M.filter { x->x%2==0 }
println(“Các số chẵn:”)
for (i in dsChan)
print(“$i\t”)
println()
//lọc các số lẻ trong mảng
var dsLe= M.filter { x->x%2==1 }
println(“Các số Lẻ:”)
for (i in dsLe)
print(“$i\t”)
println()
var k=50
//lọc các số >50 trong mảng
var dsTim=M.filter { x->x>k }
println(“Các số > $k:”)
for (i in dsTim)
print(“$i\t”)
println()
}
[/code]
Kết quả khi chạy ta thấy:
Mảng sau khi nhập – duyệt theo giá trị: 47 50 51 71 63 96 65 91 1 90 Mảng sau khi nhập – duyệt theo vị trí: 47 50 51 71 63 96 65 91 1 90 MAX=96 MIN=1 SUM=625 AVERAGE=62.5 Số chẵn=3 Số lẻ=7 Tăng dần: 1 47 50 51 63 65 71 90 91 96 Giảm dần: 96 91 90 71 65 63 51 50 47 1 Các số chẵn: 96 90 50 Các số Lẻ: 91 71 65 63 51 47 1 Các số > 50: 96 91 90 71 65 63 51 |
Như vậy tới đây Tui đã hướng dẫn xong cách xử mảng 1 chiều trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé. Cần thành thạo các thư viện để có thể áp dụng tốt vào các dự án thực tế của mình.
Bài sau Tui sẽ trình bày về mảng 2 chiều trong Kotlin
Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/yha9wwfu1879ac4/HocXuLyMang_1d.rar
Hẹn gặp các bạn ở những bài tiếp theo
Chúc các bạn thành công!
Trần Duy Thanh (http://ssoftinc.com/)
2 thoughts on “Bài 19- Xử lý mảng một chiều trong Kotlin”