트레이딩 프로젝트를 꾸준히 개발을 하고 있다.
개발을 하며 여러 데이터를 다루는데 특히 Vec<T>을 다루는 일이 많았다. 유용한 방법을 간단히 작성할 예정이다.
Vec 컨테이너가 서로 다른 타입을 가진다고 한다면 어떻게 두개 이상의 컨테이너를 동시에 처리할 수 있을까 고민하였다. 예시를 보겠다.
let prize_list: Vec<String> = vec![
"노트북".to_string(),
"아이패드".to_string(),
"애플워치".to_string()
];
let winner_list: Vec<Test> = vec![
Test { name: "홍길동".to_string(), age: 29},
Test { name: "핑구".to_string(), age: 23},
Test { name: "루피".to_string(), age: 43},
];
prize_list는 상품을 순서대로 담았다.
winner_list는 승자를 순서대로 담았다.
만약에 인덱스에 따라 컨테이너의 요소가 매칭된다고 해보자. for문을 통해서 인덱스에 접근할 수 있다.
for idx in 0..prize_list.len() {
let winner_info = &winner_list[idx];
let prize = &prize_list[idx];
println!("{}님은 상품 {}을 받으셨습니다! 축하드립니다~", winner_info.name, prize);
}

위와 같이 출력되는 걸 확인할 수 있다. 그러나 만약에 두 벡터의 길이가 다르다면 index out of bounds에러가 발생한다.
물론 단순하고 정확히 길이를 알 수 있는 경우에는 위와 같이 할 수 있다.
iterator의 더 많은 메서드를 활용한다면 안전하고 유연하게 처리할 수 있다.
zip을 활용하여 처리해보겠다.
winner_list.iter().zip(prize_list.iter()).for_each(|(winner, prize)| {
println!("{}님은 상품 {}을 받으셨습니다! 축하드립니다~", winner.name, prize);
});
간단하게 처리할 수 있다. 또한 두 벡터의 길이가 다르더라도 작은 것을 기준으로 처리를 하기 때문에 안전하게 처리할 수 있다.
iter를 활용하여 유연하게 처리할 수 있는 것이 정말 편한 것 같다.
트레이딩 프로젝트를 개발하며 klines데이터를 통해 구한 ema와 비교할 때 두 벡터를 한 번에 처리하는 과정에서 zip을 활용하였다.
더 좋은 방법이 있는지 확인해야겠다.
오늘은 양이 좀 적네요? 그래도 항상 발전하는 모습 보기 좋아요!