systembankスタッフのブログ

システムバンクスタッフのブログです。

LINQの話 その4

並び替え

並び替えするのにArray.Sortを使ったり、List.Sortを使ったり、SortedListクラスを使ったりって.NET Frameworkにはいろいろありますが(知らないだけでもっとあるのかも)、それぞれ実装方法が違うし、一体どうやって使い分ければいいの?とか考えるのもちょっと面倒になってきます。

もちろん並べ替えロジックを自前で一から実装することもできるけど、そんなことは今更絶対やりたくない。

というわけで、LINQが一番柔軟で使いやすいなと思っています。

並び替えのサンプル

見てもらうのがほうか早いのでいきなりサンプルです。

Person[] persons = new Person[]
{
    new Person { Name = "Mike", Age = 55 },
    new Person { Name = "Edo", Age = 48 },
    new Person { Name = "Ant", Age = 40 },
};

List<int> sorted = persons.OrderBy(p => p.Age).ToList();

これで年齢順にPersonオブジェクトを並べ替えしました。

さらに続けて別の要素で並べ替えしたい場合には続けてThenByメソッドを使います

List<int> sorted = persons.OrderBy(p => p.Age).ThenBy(p => p.Name).ToList();

補足すると、順序を逆にするOrderByDescending、ThenByDescendingもあるので、必要な場合はこっちも使えばよいです。

注意しておきたいこと

LINQで並び替えを行うとき、その内部処理ではIComparableインタフェースのCompareToメソッドを使っています、そのことでArrayクラスのSortメソッドなどと比較すると速度は数倍遅かったりします。

なので状況に応じて使い分けることが必要になってきます。

繰り返しになりますが、個人的にはソースコードの意味が分かりやすいのでよっぽどのことじゃない限りLINQで書いてしまいそうです。

次回

いままではLINQをメソッドとして利用する形で説明してきました。 次回は演算子としてのLINQを扱うクエリ式について書こうと思います。