Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 1.4 KB

vector.md

File metadata and controls

47 lines (34 loc) · 1.4 KB

Vector

fn main() {
  let nums = [1, 2, 3];
  nums.push(123); // Error. no method name `push` found for array
}

JS에서는 Array 객체가 push, pop 등의 메서드를 가지고 있어 편리하게 자료구조로 사용한다. 러스트에서 하려면 어떻게 해야할까?

러스트에서는 "벡터"를 사용해 해결할 수 있다.

// 벡터 또한 배열 내의 모든 자료형이 일치해야 한다.
let my_nums = vec![1, 2, 3]; // 매크로를 사용한 선언
let mut my_numbers = Vec::new(); // 함수를 사용한 선언
my_numbers.push(1);
my_numbers.pop();
my_numbers.len();

push 메서드를 사용할 경우 배열의 값을 변경하므로 mut 키워드를 선언해 이뮤터블이 아님을 알려야 한다.

벡터는 항상 순서를 유지한다.

itor

let nums = vec![1, 2, 3, 4];

// Case 1.
let mut refined_nums = vec![];
for num in nums {
  refined_nums.push(num * num);
}

// Case 2.
// _ 를 사용하면 컴파일러가 타입을 추론하게 둔다.
let refined_nums: Vec<_> = nums.iter().map(|num| num * num).collect();

값을 순회하면서 다른 형태의 배열로 가져오고 싶다면 어떻게 해야할까? forpush로 해결할 수도 있다.

하지만 이렇게 할 경우 코드에 "개입"할 여지가 생기고 "명령형" 코드가 된다.

선언적 코드를 작성하고 싶다면 itermap으로 할 수 있다.