日本の山岳一覧・百名山 API を開発しましたCLICK !

Rust | Vec型をsort_byで昇順・降順に並び替える

Rust sort_by
  • URLをコピーしました!

sort_byを使ったソートの実装方法です。

sort_byで並べ替え

  1. 昇順:list.sort_by(|a, b| a.key.cmp(&b.key))
  2. 降順:list.sort_by(|a, b| b.key.cmp(&a.key))
目次

sort_by で昇順・降順に並び替える

以下のような名前と標高(m)をキーに持つ構造体 Mountain を格納したベクタ型を

指定したキー(ここでは標高)で並び替えをしてみたいと思います。

struct Mountain {
    name: String,
    elevation: u32,
}

昇順に並び替える

標高の昇順に並び替える場合は、list.sort_by(|a, b| a.key.cmp(&b.key))で並び替えます。

#[derive(Debug)]
struct Mountain {
    name: String,
    elevation: u32,
}

impl Mountain {
    pub fn new(name: String, elevation: u32) -> Self {
        Mountain {
            name,
            elevation
        }
    }
}

fn main() {
    let mut mountains = vec![
        Mountain::new("高尾山".to_string(), 599),
        Mountain::new("富士山".to_string(), 3776),
        Mountain::new("槍ヶ岳".to_string(), 3180),
    ];

    // 標高の昇順
    mountains.sort_by(|a, b| a.elevation.cmp(&b.elevation));

    for m in mountains {
        println!("name: {}, elevation: {}", m.name, m.elevation);
    }
}

実行結果

name: 高尾山, elevation: 599
name: 槍ヶ岳, elevation: 3180
name: 富士山, elevation: 3776

降順に並び替える

降順はlist.sort_by(|a, b| b.key.cmp(&a.key))で、昇順のときとabを入れ替えるだけでOKです。

// 標高の降順
mountains.sort_by(|a, b| b.elevation.cmp(&a.elevation));

実行結果

name: 富士山, elevation: 3776
name: 槍ヶ岳, elevation: 3180
name: 高尾山, elevation: 599

まとめ

sort_byでキーを指定した昇順の並び替えのサンプルコードはよく見つかるのですが、

降順はパッと見つからなかったので備忘録として残しておきます。

簡単な記事ですみませんw

著:初田直也, 著:山口聖弘, 著:吉川哲史, 著:豊田優貴, 著:松本健太郎, 著:原将己, 著:中村謙弘, 著:フォルシア株式会社
¥3,208 (2024/04/23 20:06時点 | Amazon調べ)
Rust sort_by

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする

目次