Kỹ năng biến đổi các vector này sang các dạng khác nhau khá quan trọng trong khi lập trình. May mắn thay Rust có một tá các hàm để thao tác với kiểu Vector này Dưới đây là 10 mini bài toán để rèn luyện kỹ năng sử dụng iterator

Câu hỏi mini

Bài 1. Cho mảng let v1 = [ 1,2,3,4,5]. Muốn: r1 = [1, 4, 9, 16, 25] (Bình phương các số trong mảng)

Bài 2. Cho mảng let v1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]. Muốn tìm các sỗ chẵn r1 = [2,4,6,8]

Bài 3. Cho mảng let v1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]. Muốn tính tích các số trong mảng này

Bài4. Cho mảng v1 = [1,2, 3, 4, 5]v2 = ["Rust", "Go", "C++", "JS", "PHP"]. Muốn tạo tuple t = [(1, "Rust"),(2, "Go"), (3, "C++"), (4, "JS"), (5, "PHP")]

Bài5. Cho v1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]. Muốn có 3 vector: r1= [1, 2, 3], r2= [4, 5, 6], r3= [7, 8, 9] (nhóm theo cụm 3 cái một)

Bài 6. Cho v1 = [1, 2, 3]v2= [4, 5, 6]v3=[7, 8, 9]. Muốn r1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] (Gộp 3 mảng lại)

Bài 7. Cho v1 = [ 2, 4, 6, 8, 10]. Cần kiểm tra tất cả các số trong mảng là sỗ chẵn hay không?

Bài 8. Cho v1 = [10,30, 50, 25, 150, 50, 30]. Kiểm tra xem tất cả các số trong mảng có bé hơn 100 không.

Bài 9. Cho v1 = [1, 2, 3, 4, 5, 8, 9, 10, 15]. Kiểm tra xem đây có phải gồm các số tăng dần hay không?

Bài 10. Cho v1 = [5, 10, 15]. Tạo một mảng mà r1 = [5, 10, 15, 5, 10, 15.... 5, 10, 15] (10 lần mảng v1)

Đáp án:

  1. Sử dụng map
let v1 = [ 1,2,3,4,5];
let r1= v1.into_iter().map(|it| it * it).collect::<Vec<_>>();
  1. Sử dụng filter
let v1  = [ 1, 2,3,4,5, 6, 7, 8, 9];
let even_numbers = v1.filter(|it| *it % 2 == 0 ).collect::<Vec<_>>();
  1. Sử dụng fold
let v1= [ 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
let product = v1.iter().fold(1, |acc, it| acc * it); 

Trong đó 1: là trị khởi tạo , acc là giá trị tích luỹ sau mỗi khi duyệt qua từng số

  1. Sử dụng zip
let v1 = [1,2,3,4,5];
for (e1, e2) in v1.iter().zip(v2.iter()) {
		println!(“e1: {e1}, e2: {e2}”);
}
  1. Sử dụng chunks
 let v1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
 for group in v1.chunks(3) {
	      println!(“Group: {group:?}”);
 }
  1. Sử dụng chain
let v1  = [1, 2, 3];
let v2= [4, 5, 6];
let v3=[7, 8, 9];
let r1 = v1.iter().chain(v2.iter()).chain(v3.iter()).collect::<Vec<_>>();
  1. Sử dụng all
let v1 = [ 2, 4, 6, 8, 10];
if v1.iter().all( |it| *it % 2 == 0) {
	println!("All even");
} else {
	println!("All are not even");
}
  1. Sử dụng any
let v1 = [10,30, 50, 25, 150, 50, 30];
if v1.iter().any(  |it| *it > 100) {
	  println!("Some are above 100");}
else {
	println!("None are above 100");
}
  1. Sử dụng windows. Nó là hàm của slice, ko phải của iterator
let v1 = [1, 2, 3, 4, 5, 8, 9, 10, 15];
if v1.windows(2).all(|group| group[0] < group[1]) {
	println!("Numbers are ascending");
} else {
	println!("Numbers are not ascending");
}
  1. Sử dụng cycle
let v1 = [5, 10, 15];
let r1 = v1.iter().cycle().take(10),collect::<Vec<_>>();