めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【C#】リストをソートする

リストのを並び替えたい時のソートの備忘録です🐼

public class Panda
{
    public string name{get; set;}

    public int age{get; set;}

    public float weight{get; set;}
}


public class Main
{
    List<Panda> panda = new List<Panda>();


    void Start()
    {
       panda.Add(new Panda{name = "ぱんーだ", age = 2, weight = 330.78f});
       panda.Add(new Panda{name = "ぱんちぃ", age = 1, weight = 582.49f});
       panda.Add(new Panda{name = "ぱんころ", age = 3, weight = 496.21f});
       panda.Add(new Panda{name = "ぱんまる", age = 1, weight = 139.93f});


       //昇順に並びかえ
       panda.Sort((a, b) => a.age - b.age);

       foreach(Panda p in panda){
            Debug.Log("昇順:::"+ p.age);
       }


       //降順に並びかえ
       panda.Sort((a, b) => b.age - a.age);

       foreach(Panda p in panda){
            Debug.Log("降順:::"+ p.age);
       }


       //名前昇順に並びかえ
       panda.Sort((a, b) => string.Compare(a.name, b.name));

       foreach(Panda p in panda){
            Debug.Log("名前昇順:::"+ p.name);
       }


        //体重昇順に並びかえ
        panda.Sort((a, b) => a.weight.CompareTo(b.weight));

        foreach(Panda p in panda){
            Debug.Log("体重昇順:::"+ p.weight);
       }


        //こういう書き方もある
        panda.Sort(delegate(Panda a, Panda b)
        {
            if (a.name == null && b.name == null) return 0;
            else if (a.name == null) return -1;
            else if (b.name == null) return 1;
            else return a.name.CompareTo(b.name);
        });

               
       foreach(Panda p in panda){
            Debug.Log("名前昇順2:::"+ p.name);
       }

}


stringの場合はstringが持っているCompareメソッドの戻り値を条件にして昇順に並びかえができる。
floatの場合はfloatのリスト要素が持ってるCompareToメソッドの戻り値を条件にして並びかえができる。


結果↓↓↓

f:id:maplesyrup-cs6:20191108131116p:plain
結果