Phương thức map
Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 60 trên 78.
Hàm bậc cao là hàm nhận một hàm khác làm đối số. Mảng có một số hàm như vậy, và map() là hàm đầu tiên.
map() gọi một hàm cho từng phần tử trong mảng và trả về một mảng mới chứa các kết quả theo đúng thứ tự:
func square(n):
return n * nvar numbers = [1, 2, 3, 4, 5]
var squares = numbers.map(square)
print(squares)[1, 4, 9, 16, 25]Truyền hàm bằng tên của nó, không có dấu ngoặc đơn: map(square) chuyển hàm vào, còn map(square()) sẽ cố gọi hàm ngay lập tức. Sau đó, map() gọi hàm một lần cho mỗi phần tử: 1 thành 1, 2 thành 4, 3 thành 9, v.v.
Với một phép tính ngắn, lambda giúp bạn không cần tạo hàm riêng:
var squares = numbers.map(func(n): return n * n)Mảng mới có cùng kích thước với mảng ban đầu, còn bản thân numbers thì không thay đổi. Kết quả có thể có kiểu dữ liệu khác với các phần tử:
var words = ["apple", "kiwi", "banana"]
print(words.map(func(w): return w.length()))[5, 4, 6]map() trả về một Array thông thường, ngay cả khi bạn gọi nó trên một mảng có kiểu như Array[int]. Lưu kết quả đó vào một biến Array[int] sẽ khiến chương trình dừng và báo lỗi, vì vậy hãy lưu nó vào một biến không có kiểu hoặc một Array.
split() trả về một PackedStringArray, kiểu này không có map(). Trước tiên, hãy chuyển nó thành một Array: Array("1,2,3".split(",")).map(func(s): return int(s)) cho kết quả [1, 2, 3].
Thử thách
DễViết một hàm (function) có tên convert_to_uppercase, nhận một mảng chuỗi strings và trả về một mảng mới trong đó mọi chuỗi đều viết hoa.
Dùng map() với một hàm lambda, không dùng vòng lặp. Ví dụ, convert_to_uppercase(["hello", "world"]) trả về ["HELLO", "WORLD"].
Các bài kiểm tra tự gọi convert_to_uppercase(). Đừng gọi hàm này và đừng in ra gì cả.
Tự làm thử
func convert_to_uppercase(strings: Array[String]):
# Viết code tại đây
pass
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Chuyên sâu về chuỗi
Các phương thức của chuỗiTìm kiếm trong chuỗiThay thế và xóa khoảng trắngTách và nốiÔn tập: Kiểm tra tên người dùng7Kiểu liệt kê
Kiểu liệt kê là gì?Định nghĩa kiểu liệt kêCác giá trị của kiểu liệt kêKiểu liệt kê trong matchÔn tập: đèn giao thông10Hàm nâng cao
Trả về nhiều giá trịHàm lambda phần 1Hàm lambda phần 2Ôn tập: sắp xếp bằng lambdaHàm đệ quy phần 1Hàm đệ quy phần 2Ôn tập: tính tổng mảng lồng nhau13Hệ thống quản lý hàng tồn kho
Tổng quan dự ánThêm mặt hàng2Ra quyết định nâng cao
So khớp với biếnĐiều kiện bảo vệ trong so khớpMẫu mảngMẫu từ điểnKiểm tra thành viênÔn tập: Bộ phân tích lệnh5Ứng dụng sổ liên lạc
Hiển thị menuThêm liên hệ8Trình quản lý hồ sơ học sinh
Tổng quan dự ánThêm học sinh11Hàm bậc cao
Phương thức mapPhương thức filterPhương thức reduceany và allÔn tập: trình xác thực emailÔn tập: bộ xử lý số3Mảng nhiều chiều
Cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập: mảng 2 chiềuMảng răng cưaCác mẫu phổ biến với mảng 2 chiềuÔn tập: bàn cờ6Tập hợp với từ điển
Tập hợp là gì?Từ điển như một tập hợpThêm và xóaHợp và giaoHiệu tập hợpÔn tập: Xóa phần tử trùng lặp9Tổng hợp dữ liệu nâng cao
Tính tổng các giá trịTìm giá trị nhỏ nhất và lớn nhấtSắp xếp tùy chỉnhÔn tập: Sắp xếp từ điểnTự luyện tập: Trình biên dịch GDScript online