Vector và nested loop trong Rust
TIL
594
@100daysTIL
72
White

Huy Trần viết ngày 21/02/2018

#Day016

Mấy nay đang phải làm Rust lại nên lại viết TIL về Rust.

Một trường hợp lỗi mà ai cũng có thể mắc phải khi làm việc với vòng lặp for lồng nhau trong Rust, lấy ví dụ:

let a = vec![1, 2, 3];
let b = vec![4, 5, 6];

for i in a {
  for j in b {
    // do something
  }
}

Đoạn code trên sẽ gặp ngay một cái lỗi khá là hiển nhiên, đó là:

   |
23 |         for j in b {
   |                  ^ value moved here in previous iteration of loop
   |
   = note: move occurs because `b` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait

Lý do ở đây là ngay từ sau lần lặp đầu tiên bên trong a, thì biến b đã được moved vào trong scope này, dẫn tới lần lặp thứ 2 (thuộc một scope khác) thì b không còn truy cập được nữa.

Giải pháp cho trường hợp này là chỉ lấy tham chiếu của vector cần lặp thay vì chính vector đó để tránh bị moved, trong Rust thì ta có thể lấy tham chiếu của một vector dưới dạng một slice, thông qua hàm as_slice(), đoạn code trên có thể sửa lại thành:

for i in a.as_slice() {
  for j in b.as_slice() {
    // do something
  }
}

huytd 21-02-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

109 bài viết.
1593 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
155 46
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết 3 năm trước
155 46
White
149 39
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết 2 năm trước
149 39
White
104 17
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết 2 năm trước
104 17
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 tháng trước
0 2
White
19 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 2 năm trước
19 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
109 bài viết.
1593 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!