Rust Shuffle
2023. 6. 11. 19:52ㆍLanguage/Rust
Shuffle은 컬렉션의 요소를 무작위로 섞는 알고리즘으로, 데이터의 순서를 무작위로 변경하는데 사용됩니다.
셔플을 사용하기 위해서는 여러 방법이 있습니다.
Std Shuffle 사용
Rust에서는 Array, List, Vector 등 기본적으로 Shuffle을 사용 할 수 있습니다.
use rand::{Rng, seq::SliceRandom};
const LEN:usize = 10;
fn main() {
let mut vectors = vec![];
let mut arrays= [0;LEN];
for i in 1..=LEN {
vectors.push(i);
arrays[i-1] = i;
}
let mut rng = rand::thread_rng();
println!("[Vector] before : {:?}", vectors);
vectors.shuffle(&mut rng);
println!("[Vector] after : {:?}", vectors);
println!("[Array] before : {:?}", arrays);
arrays.shuffle(&mut rng);
println!("[Array] after : {:?}", arrays);
}
Random으로 직접 구현하기
Rust에서 제공하는 rand Crate를 사용해서 구현 할 수 있습니다.
[dependencies]
rand = "0.8.5"
use rand::Rng;
const LEN:usize = 10;
fn shuffle<T>(data: &mut [T]) {
let mut rng = rand::thread_rng();
let len = data.len();
for i in (1..len).rev() {
let j = rng.gen_range(0..=i);
data.swap(i, j);
}
}
fn main() {
let mut nums = vec![];
for i in 1..=LEN {nums.push(i);}
let mut rng = rand::thread_rng();
println!("before : {:?}", nums);
shuffle(&mut nums);
println!("after : {:?}", nums);
}
0 부터 LEN까지 돌면서 [i] 와 [i~LEN] 중에 Random 값을 서로 자리를 바꾸는 방법입니다.
'Language > Rust' 카테고리의 다른 글
Rust 명령줄의 인수 받기 (0) | 2023.06.18 |
---|---|
Rust의 HashMap 소개 (1) | 2023.06.15 |
Rust fmt 모듈 (0) | 2023.06.07 |
Rust에서 RabbitMQ 사용하기 (WorkQueue) (0) | 2023.06.03 |
if Let (1) | 2023.06.03 |