Menu
CoddyTech

map và collect

Thuộc phần Kiến thức nền tảng trong hành trình Ruby của Coddy. Bài học 68 trên 88.

each rất phù hợp để thực hiện các thao tác trên phần tử, nhưng đôi khi bạn muốn biến đổi một mảng thành mảng mới. Phương thức map (còn gọi là collect) làm đúng việc này: tạo một mảng mới chứa kết quả chạy khối lệnh của bạn trên từng phần tử.

numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }

puts doubled  # Đầu ra: 2, 4, 6, 8

Điểm khác biệt chính so với each là map trả về một mảng mới chứa các giá trị đã được biến đổi. Mảng ban đầu vẫn không thay đổi.

Đây là một ví dụ thực tế chuyển đổi nhiệt độ từ Celsius sang Fahrenheit:

celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }

puts fahrenheit  # Đầu ra: 32, 68, 212

Bạn cũng có thể dùng map với các chuỗi:

names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }

puts capitalized  # In ra: Alice, Bob

Các phương thức map và collect giống hệt nhau. Ruby cung cấp cả hai tên, nên bạn có thể dùng tên nào phù hợp hơn với đoạn code của mình. Hầu hết nhà phát triển Ruby thích map hơn vì tên này ngắn hơn.

challenge icon

Thử thách

Dễ

Đọc một dòng đầu vào gồm các số nguyên được phân tách bằng dấu phẩy (ví dụ: 2,4,6,8,10).

Tách đầu vào thành một mảng số nguyên, sau đó dùng phương thức map để tạo một mảng mới, trong đó mỗi số được bình phương (nhân với chính nó).

In từng phần tử của mảng mới đã bình phương trên một dòng riêng.

Ví dụ, nếu đầu vào là 2,4,6,8,10, đầu ra sẽ là:

4
16
36
64
100

Nếu đầu vào là 1,2,3,4,5, đầu ra sẽ là:

1
4
9
16
25

Nếu đầu vào là 3,7,11, đầu ra sẽ là:

9
49
121

Nếu đầu vào là 10, đầu ra sẽ là:

100

Tự làm thử

# Đọc đầu vào gồm các giá trị phân tách bằng dấu phẩy
input = gets.chomp

# TODO: Viết code của bạn bên dưới
# 1. Tách chuỗi đầu vào thành một mảng số nguyên
# 2. Dùng phương thức map để tính bình phương từng số
# 3. In mỗi số đã bình phương trên một dòng riêng
quiz iconTự kiểm tra

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 Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Ruby online