2016-11-24 1 views
6

녹의 벡터를 연결할 수 있습니까? 그렇다면 우아한 방법이 있습니까? 나는 다음과 같은 것을 가지고있다 :녹에서 벡터를 연결하는 가장 좋은 방법

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

for val in &b { 
    a.push(val); 
} 

누군가 더 좋은 방법을 알고 있는가? append() 방법이있다 std::vec::Vec

+1

관련, 가능한 중복 : [? 벡터에 조각을 추가 할 수있는 관용적 인 방법은 무엇 (http://stackoverflow.com/q/29998515/464709) –

+1

질문에있는 코드가 컴파일되지 않습니다. – bluss

+1

좀 더 구체적으로 기재 할 수 있습니까? 다른 두 개를 소비하여 벡터를 생성 하시겠습니까, 아니면 연결 위에 반복자가 있습니까? –

답변

14

구조 : 빈 other 떠나는 Self

fn append(&mut self, other: &mut Vec<T>) 

이동 other의 모든 요소.

귀하의 예제에서

, 다음 코드는 ab을 돌연변이에 의해 두 개의 벡터를 연결할 것이다

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, []); 
} 

또는 당신이 할 수있는 무언가의 모든 요소를 ​​추가 할 Extend::extend()을 사용할 수 있습니다 주어진 벡터에 대한 이터레이터 (예 : Vec)로 변환됩니다.

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 

벡터 b은 비워서 이동하지 않고 이동합니다. 벡터에 Copy을 구현하는 요소가 포함되어있는 경우 이동을 피하기 위해 벡터 대신 extend()에 불변 참조를 전달할 수 있습니다. 이 경우 벡터 b는 변경되지 않습니다 :

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]); 
+0

아, 나는 그것을 보지 못했습니다. 감사! 이것은 완벽 해. –

관련 문제