C#でコレクションを昇順または降順に並び替える

C#の自作クラスのコレクションを、特定のプロパティをキーにして並び替えてみました。

目次

  1. 手順
  2. 試してみた

手順

LINQを使って並び替えてみました。

LINQの order by句 を使用します。

LINQのクエリのorderby句に、ソートに使うプロパティを指定します。

試してみた

自作のクラス(Hoge)のコレクション(Piyo)に下図のデータを入れて、LINQで並び替えた後にコンソールに出力してみました。

コレクションの中身はこれです。

サンプル

コードはこうしました。

using System;
using System.Linq;
using System.Collections.ObjectModel;

namespace trial_orderby
{
    class Program
    {
        static void Main(string[] args)
        {
            // 並び替えられるコレクションを作る
            Collection<Hoge> Piyo = new Collection<Hoge>();

            Hoge temp1 = new Hoge();
            temp1.Id = 1;
            temp1.Name = "Windows";
            Piyo.Add(temp1);
            Hoge temp2 = new Hoge();
            temp2.Id = 2;
            temp2.Name = "Linux";
            Piyo.Add(temp2);
            Hoge temp3 = new Hoge();
            temp3.Id = 3;
            temp3.Name = "Mac";
            Piyo.Add(temp3);
            Hoge temp4 = new Hoge();
            temp4.Id = 4;
            temp4.Name = "Android";
            Piyo.Add(temp4);
            Hoge temp5 = new Hoge();
            temp5.Id = 5;
            temp5.Name = "MSX";
            Piyo.Add(temp5);

            // 方向を省略した並び替え
            var query1 = from p in Piyo
                        orderby p.Name
                        select p;
            foreach(var q in query1)
            {
                Console.WriteLine(q.Id.ToString() + " : " + q.Name);
            }

            // 昇順で並び替え
            Console.WriteLine("\nAscending : ");
            var query2 = from p in Piyo
                        orderby p.Name ascending
                        select p;
            foreach (var q in query2)
            {
                Console.WriteLine(q.Id.ToString() + " : " + q.Name);
            }

            // 降順で並び替え
            Console.WriteLine("\nDescending : ");
            var query3 = from p in Piyo
                        orderby p.Name descending
                        select p;
            foreach (var q in query3)
            {
                Console.WriteLine(q.Id.ToString() + " : " + q.Name);
            }

        }
    }

    public class Hoge
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

単純ですね。

foreach内のConsole.WriteLineで出力している部分を、ソート先のデータを格納するコレクションにaddするようにすれば、できあがりです。

出力はこうなります。

出力

きちんとソートされてますね。

公開日

広告