녹의 벡터를 연결할 수 있습니까? 그렇다면 우아한 방법이 있습니까? 나는 다음과 같은 것을 가지고있다 :녹에서 벡터를 연결하는 가장 좋은 방법
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
for val in &b {
a.push(val);
}
누군가 더 좋은 방법을 알고 있는가? append()
방법이있다 std::vec::Vec
녹의 벡터를 연결할 수 있습니까? 그렇다면 우아한 방법이 있습니까? 나는 다음과 같은 것을 가지고있다 :녹에서 벡터를 연결하는 가장 좋은 방법
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
for val in &b {
a.push(val);
}
누군가 더 좋은 방법을 알고 있는가? append()
방법이있다 std::vec::Vec
구조 : 빈 other
떠나는 Self
에
fn append(&mut self, other: &mut Vec<T>)
이동
귀하의 예제에서other
의 모든 요소.
, 다음 코드는 가a
및 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, []);
}
또는 당신이 할 수있는 무언가의 모든 요소를 추가 할 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]);
아, 나는 그것을 보지 못했습니다. 감사! 이것은 완벽 해. –
관련, 가능한 중복 : [? 벡터에 조각을 추가 할 수있는 관용적 인 방법은 무엇 (http://stackoverflow.com/q/29998515/464709) –
질문에있는 코드가 컴파일되지 않습니다. – bluss
좀 더 구체적으로 기재 할 수 있습니까? 다른 두 개를 소비하여 벡터를 생성 하시겠습니까, 아니면 연결 위에 반복자가 있습니까? –