Symfoware

Symfowareについての考察blog

C# LINQ の使い方(Count, Take, Skip, First, Last, Max, Min, Contains, All, Any, Distinct, Sum)

今更ですがC# LINQの使い方を調べてみます。
コンパイルと実行はDebian 8 + mono 4.6で行っています。
Debian 8(jessie)にapt-getでmonoをインストール


Count



Count:要素数を取得します。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 要素数を取得        
  10.         Console.WriteLine(src.Count());
  11.         
  12.     }
  13. }



実行結果


5




実際にはこんな感じで条件を指定して使用することになると思います。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 偶数の要素数を取得
  10.         Console.WriteLine(src.Count(item => item % 2 == 0));
  11.         
  12.     }
  13. }



実行結果


2






Take, Skip



Take:指定した数だけ要素をより出します。
Skip:指定した数だけ読み飛ばします。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 先頭から2つの要素を取得
  10.         foreach(int item in src.Take(2)) {
  11.             Console.WriteLine(item);
  12.         }
  13.         
  14.     }
  15. }



実行結果


1
2




実際には値を読み飛ばすSkipと合わせて使用することになると思います。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 1つ読み飛ばし、先頭から2つの要素を取得
  10.         foreach(int item in src.Skip(1).Take(2)) {
  11.             Console.WriteLine(item);
  12.         }
  13.         
  14.     }
  15. }



実行結果


2
3




TakeしたあとにSkipすることも可能です。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 先頭から2つの要素を取得し、1つ読み飛ばし
  10.         foreach(int item in src.Take(2).Skip(1)) {
  11.             Console.WriteLine(item);
  12.         }
  13.         
  14.     }
  15. }



実行結果


2




Skipのみだと、Skipした以降の全要素が取得できます。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 先頭から2つの要素を読み飛ばし
  10.         foreach(int item in src.Skip(2)) {
  11.             Console.WriteLine(item);
  12.         }
  13.         
  14.     }
  15. }



実行結果


3
4
5







First, Last



First:先頭の要素を取得
Last:最後の


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 最初の要素を取得
  10.         Console.WriteLine(src.First());
  11.         
  12.         // 最後の要素を取得
  13.         Console.WriteLine(src.Last());
  14.         
  15.         
  16.     }
  17. }



実行結果


1
5




実際には、条件式と組み合わせて使用することになると思います。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 最初の偶数の要素を取得
  10.         Console.WriteLine(src.First(item => item % 2 == 0));
  11.         
  12.         // 最後の偶数の要素を取得
  13.         Console.WriteLine(src.Last(item => item % 2 == 0));
  14.         
  15.         
  16.     }
  17. }



実行結果


2
4






Max, Min



Max:最大値を取得
Min:最小値を取得


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 最大の要素を取得
  10.         Console.WriteLine(src.Max());
  11.         
  12.         // 最小の要素を取得
  13.         Console.WriteLine(src.Min());
  14.         
  15.     }
  16. }



実行結果


5
1





Contains



Contains:指定した要素が含まれるか。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // 3が含まれるか
  10.         Console.WriteLine(src.Contains(3));
  11.         
  12.         // 6が含まれるか
  13.         Console.WriteLine(src.Contains(6));
  14.         
  15.     }
  16. }



実行結果


True
False






All, Any



All:要素がすべての条件を満たすか
Any:要素がどれか1でも条件を満たすか


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5};
  8.         
  9.         // すべてが5以下か
  10.         Console.WriteLine(src.All(item => item <= 5));
  11.         
  12.         // いずれかが5以下か
  13.         Console.WriteLine(src.Any(item => item <= 5));
  14.         
  15.         
  16.         // すべてが5未満か
  17.         Console.WriteLine(src.All(item => item < 5));
  18.         
  19.         // いずれかが5未満か
  20.         Console.WriteLine(src.Any(item => item < 5));
  21.         
  22.     }
  23. }



実行結果


True
True
False
True





Distinct



Distinct:重複する要素を排除


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5, 4, 3, 2, 1};
  8.         
  9.         foreach(int item in src.Distinct()) {
  10.             Console.WriteLine(item);
  11.         }
  12.         
  13.     }
  14. }



実行結果


1
2
3
4
5





Sum



Sum:要素の合計を求める


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5, 4, 3, 2, 1};
  8.         
  9.         Console.WriteLine(src.Sum());
  10.         
  11.     }
  12. }



実行結果


25




他のメソッドと組み合わせて使えるのが便利ですね。


  1. using System;
  2. using System.Linq;
  3. public class Sample {
  4.     
  5.     static public void Main () {
  6.         
  7.         int[] src = new int[]{1, 2, 3, 4, 5, 4, 3, 2, 1};
  8.         
  9.         Console.WriteLine(src.Distinct().Sum());
  10.         
  11.     }
  12. }



実行結果


15



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/10/02(日) 18:05:52|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<C# LINQ の使い方(Select, Where, OrderBy, OrderByDescending, Aggregate) | ホーム | SQL Server 2016 ExpressにMicrosoft JDBC Driver 6.0でJavaから接続>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1927-ed8623bb
この記事にトラックバックする(FC2ブログユーザー)