【Linq】配列の扱い

特定の条件に一致する要素を一つ取り出す

[1] FirstOrDefault()

 * FirstOrDefault()で、条件に一致した要素を取り出すことができる
 * First()では、要素が見つからなかった場合、例外が発生してしまうことに注意

サンプル

DateTime[] source =
     {
          new DateTime(2011,1,2),
          new DateTime(2011,2,3),
          new DateTime(2011,3,4),
          new DateTime(2011,4,5),
     }; 
DateTime findDate = source.FirstOrDefault(x => x.Month == 3);

[2] Array.Find()

 * Array.Find()でも、条件に一致した要素を取り出すことができる
 * 条件に一致するインデックスを求める場合は、Array.FindIndex メソッドを利用

サンプル

DateTime[] source =
     {
          new DateTime(2011,1,2),
          new DateTime(2011,2,3),
          new DateTime(2011,3,4),
          new DateTime(2011,4,5),
     };
DateTime findDate = Array.Find(source, x => x.Month == 3);

特定の条件に一致する要素を複数取り出す

 * Where()で、特定の条件に一致する要素を複数取り出すことができる

サンプル

DateTime[] source =
     {
          new DateTime(2011,1,2),
          new DateTime(2011,2,3),
          new DateTime(2011,3,4),
          new DateTime(2011,4,5),
     }; 
DateTime[] findDates = source.Where(x => x.Month < 2).ToArray();

特定の条件に一致して要素が存在しているかどうかを判定

 * Array.Exists()で、特定の条件に一致して要素が存在しているかどうかを判定することができる

サンプル

DateTime[] source =
     {
          new DateTime(2011,1,2),
          new DateTime(2011,2,3),
          new DateTime(2011,3,4),
          new DateTime(2011,4,5),
     };
if (Array.Exists(source, x => x.Month < 2))
{
     this.label.Text = "存在する";
}
else
{
     this.label.Text = "存在しない";
}

配列の要素の重複を取り除くには

 * Distinct();で、配列の要素の重複を取り除くことができる

サンプル

var target = source.Distinct();

補足:Aggregate

 * Aggregateもあるらしいが。
http://homepage1.nifty.com/rucio/VBLINQ/LINQ03.htm