Hacktoberfest週2


おい、皆さん!Hacktoberfestの私の前の週は、ここで読むことができます:



プロジェクト
今週は素晴らしいと言って始めましょう!今週、私は、名前をつけられたロボットの上で働きましたparrot これは私が前にしたことがない何かです.それは錆で書かれ、開発の初期段階にあります.

問題
The issue 私は、今週を割り当てられました!playtop コマンド.このコマンドを使用すると、キューの先頭に要求された曲やプレイリストが配置されます.

PR
今、私はあなたにこの問題へのエレガントな解決策を考えるためにしばらくの間私の脳を奪ったと言いましょう.キューを変更する方法を見てみましょう.The modify_queue() 関数は型trackQueue そして、本質的に曲のベクトルである待ち行列を公開する議論としての閉鎖をします.
今、我々はキューを持って想像してください
let queue = vec![0,1,2,3,4];
インデックス0の歌は、常に現在の演奏歌です.それで、キューを操作するとき、それはそのままのままでなければなりません.これを行うには、私たちは曲の残りの部分を取得する分割機能を使用することができます.
let mut non_playing = queue.split_off(1);
queue: 0
non_playing: 1,2,3,4
新しく挿入された曲(この場合は5と呼ばれる)の場所に、我々はちょうど順序を保つものによって、右にノンパー演奏VECを回転させることができます.
non_playing.rotate_right(1)
non_playing: 5,1,2,3,4
プレイリストのために、私はプレイリストで歌のNUMを計算して、プレイリストの最初の歌がトップにあるように、ノンパー演奏の長さからそれを引いた.今これを書いて、私はちょうどコールすることができたrotate_right プレイリストの曲のnumを渡すが、meh.
let rotate_num = non_playing.len() - num_of_songs;
non_playing.rotate_left(rotate_num);
最後に、私たちはqueue.append(non_playing)コードの最終的な重要ビットは以下です.チェックアウトPR 詳細は
fn reorder_queue(handler: &MutexGuard<Call>, is_playlist: bool, num_of_songs: usize) {
    //Check if we need to move new item to top
    if handler.queue().len() > 2 {
        handler.queue().modify_queue(|queue| {
            let mut non_playing = queue.split_off(1);
            if !is_playlist {
                //rotate the vec to place last added song to the front and maintain order of songs
                non_playing.rotate_right(1);
            } else {
                //We subtract num of songs from temp length so that the first song of playlist is first
                let rotate_num = non_playing.len() - num_of_songs;
                non_playing.rotate_left(rotate_num);
            }
            //Append the new order to current queue which is just the current playing song
            queue.append(&mut non_playing);
        });
    }
}

全体的思考
今週はすごい!私は新しい何かに取り組むのが好きでした、そして、仕事は私が問題を解決する新しい方法を探検することにちょうど正しかったです.私は楽しみのトンを持っていたと私はHacktoberfestの残りの部分に興奮している.コメントの中で私のためにどんなさびたレポの提案も落としてください