Phương thức reduce
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 62 trên 78.
reduce() gộp tất cả phần tử của một mảng thành một giá trị: một tổng, một tích, phần tử lớn nhất hoặc một câu.
var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)10Hàm này nhận hai đối số: một hàm và một giá trị bắt đầu, ở đây là 0. Hàm nhận kết quả tính được đến thời điểm hiện tại, gọi là bộ tích lũy (acc), cùng với phần tử tiếp theo. Giá trị hàm trả về sẽ trở thành bộ tích lũy mới:
accbắt đầu bằng00 + 1là1,1 + 2là3,3 + 3là6,6 + 4là10- sau phần tử cuối cùng,
reduce()trả về bộ tích lũy:10
Với phép nhân, bắt đầu từ 1: numbers.reduce(func(acc, n): return acc * n, 1) bằng 24.
Nếu không có giá trị khởi đầu, phần tử đầu tiên sẽ là giá trị khởi đầu và hàm chạy từ phần tử thứ hai trở đi. Cách này phù hợp để tìm phần tử lớn nhất:
var biggest = [4, 9, 2].reduce(func(a, b): return a if a > b else b)
print(biggest) # 9Với một mảng rỗng không có giá trị bắt đầu, reduce() trả về null, vì vậy hãy cung cấp giá trị bắt đầu nếu mảng có thể rỗng.
Bộ tích lũy có thể thuộc bất kỳ kiểu dữ liệu nào. Với giá trị khởi đầu là "", cách này tạo một chuỗi từ các chữ cái đầu tiên:
var words = ["game", "over"]
print(words.reduce(func(acc, w): return acc + w[0], "")) # goThử thách
DễChương trình đọc một dòng gồm các số nguyên được phân tách bằng dấu phẩy và lưu chúng vào mảng numbers. Phần này đã được viết sẵn.
Dùng reduce() cho từng mục đích sau để in ra ba dòng:
- tổng các số
- tích của chúng
- số lớn nhất (viết phép so sánh trong lambda, không gọi
max())
Luôn có ít nhất một số. Với đầu vào 3,7,2,8,4, đầu ra là:
24
1344
8Tự làm thử
extends Node
func _ready():
var numbers := []
for part in OS.read_string_from_stdin().split(","):
numbers.append(int(part))
# In ra tổng, tích và số lớn nhất, mỗi kết quả dùng reduce()
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