Cấu trúc std::vec::Vec
có phương pháp append()
:
fn append(&mut self, other: &mut Vec<T>)
Chuyển tất cả các yếu tố của other
vào Self
, để lại other
trống.
Từ ví dụ của bạn, đoạn code sau sẽ nối hai vectơ bởi đột biếna
và b
:
fn main() {
let mut a = vec![1, 2, 3];
let mut b = vec![4, 5, 6];
a.append(&mut b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, []);
}
Ngoài ra, bạn có thể sử dụng Extend::extend()
để thêm tất cả các yếu tố của một cái gì đó mà có thể biến thành một trình lặp (như Vec
) thành một vectơ đã cho:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
a.extend(b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
// b is moved and can't be used anymore
Lưu ý rằng véc tơ b
được di chuyển thay vì làm trống. Nếu các vectơ của bạn chứa các phần tử thực hiện Copy
, bạn có thể chuyển một tham chiếu bất biến tới một vector tới extend()
thay vì để tránh di chuyển. Trong trường hợp đó vector b
là không thay đổi:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
a.extend(&b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, [4, 5, 6]);
liên quan, có thể trùng lặp: [? Cách thành ngữ để nối thêm một lát để một vector là gì] (http://stackoverflow.com/q/29998515/464709) –
Mã trong câu hỏi của bạn không biên dịch. – bluss
Bạn có thể cụ thể hơn không? Bạn có muốn tạo ra một véc tơ bằng cách tiêu thụ một véc tơ khác, hoặc chỉ có một trình lặp qua kết nối không? –