Rust Shuffle

2023. 6. 11. 19:52Language/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