FC2ブログ
    06 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 08

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Listでのソートの仕方。(あ、以前同じような内容かいたかも 

    こんにちは!坂内っす。
    夏真っ盛りですね!
    30度超えが続いてまいりました!熱中症などにお気を付けください!


    C#でのListソートのお話。

    一度同じような内容の記事かきましたね。

    まぁもう一度ってことで・・・・



    [Blog20210719.cs]

    using System;
    using System.Collections.Generic;
    using UnityEngine;

    public class Blog20210719 : MonoBehaviour
    {
    public enum GameType {
    Action,
    Puzzle,
    Rpg,
    Sports,
    Etc,
    }

    public class Famicon {
    public int no;
    public string gameName;
    public DateTime releaseDate;
    public GameType gameType;

    public Famicon(int no, string name, DateTime date, GameType type) {
    this.no = no;
    gameName = name;
    releaseDate = date;
    gameType = type;
    }

    public Famicon() { }
    }

    List cassettes = new List();

    private void Start() {
    SetGame();

    ViewList("そのまま", cassettes);

    // ソート

    }

    void ViewList(string viewStr, List list) {
    foreach (Famicon fami in list) {
    Debug.Log(fami.no + " 「" + fami.gameName + "」 発売日 : " + fami.releaseDate.ToLongDateString() + " ゲーム種 : " + fami.gameType);
    }
    }

    void SetGame() {
    Famicon game = new Famicon();
    game = new Famicon(0, "マリオブラザーズ", DateTime.Parse("1983/9/9"), GameType.Action);
    cassettes.Add(game);
    game = new Famicon(1, "テニス", DateTime.Parse("1984/1/14"), GameType.Sports);
    cassettes.Add(game);
    game = new Famicon(2, "ゴルフ", DateTime.Parse("1984/5/1"), GameType.Sports);
    cassettes.Add(game);
    game = new Famicon(3, "アイスクライマー", DateTime.Parse("1985/1/30"), GameType.Action);
    cassettes.Add(game);
    game = new Famicon(4, "ファイナルファンタジー", DateTime.Parse("1987/12/18"), GameType.Rpg);
    cassettes.Add(game);
    game = new Famicon(5, "コナミワイワイワールド", DateTime.Parse("1988/1/14"), GameType.Action);
    cassettes.Add(game);
    game = new Famicon(6, "ぎゅわんぶらあ自己中心派", DateTime.Parse("1987/11/11"), GameType.Etc);
    cassettes.Add(game);
    }
    }




    こんな感じでまだソートしてないのでそのままの順で表示されます。

    では、GameTypeでソートをしてみます。

    private void Start() {
    SetGame();

    ViewList("そのまま", cassettes);

    // ゲーム種でソート
    cassettes.Sort((a, b) => b.gameType - a.gameType);
    ViewList("ゲーム種でソート", cassettes);
    }



    List.Sort((a, b) => b.gameType - a.gameType)
    でソートができます。
    これの結果はこれ。



    ゲーム種でソートができました。
    Actionが最後にきましたね。
    ソートの引数を変えてやれば、逆順になります。

    List.Sort((a, b) => a.gameType - b.gameType);

    こうすれば、Actionが先にきますね。

    名前でソートする場合はこんな感じ。


    private void Start() {
    SetGame();

    ViewList("そのまま", cassettes);

    // ゲーム種でソート
    cassettes.Sort((a, b) => b.gameType - a.gameType);
    ViewList("ゲーム種でソート", cassettes);

    cassettes.Sort((a, b) => a.gameName.CompareTo(b.gameName));
    ViewList("名前でソート", cassettes);
    }



    stringには-(マイナス)が使えないため、CompareToを使います。



    ちゃんと名前でソートできましたね。

    こんな感じでListのソートができます。

    ってことで、今日はここまで!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0