C#言語のLinqとは?
はじめに
こんばんは、サルモリです!
今回は下記の記事について書いていこうと思います。
今回のテーマ
Linqの使い方を解説。SelectメソッドとWhereメソッドの使い方。
今回はC#のLinqについて学びましょう。
覚えると本当にC#の世界が変わると思いますので、是非使いこなせるようになってくださいね!!
他のLinqの記事についてはこちら
Linqを使用する場面
ココがポイント
Linqはリストや配列に対して、使用することが多いです。リストや配列の各要素に対して、取得、修正、判定、並び替えなど色々なことが出来ます。
基本的にfor文やforeach文など繰り返しの処理を行う時に使います。
リストや配列はEnumerableインタフェースを実装しているので、Linqを使用することができます。
EnumerableインターフェースにLinqのメソッドが定義されているので、リストや配列でもLinqメソッドが使用することができます。
Linqメソッドの解説の流れ
これから複数の記事に渡って、Linqのメソッドを解説していこうとおもうので、下記のような流れで説明していきたいと思います。
行いたい処理の例を書きます。
Linqを使用しない書き方と使用する書き方のソースコードを書いていきます。
ソースコードには、配列を使います。
この流れで色々なメソッドを解説していこうと思いますので、是非みてくださいね!!
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
Selectメソッドの使い方
LinqのSelectメソッドについて
まずはSelectメソッドの使い方について、例を書いていきます。
行いたい処理
int型配列の全ての要素に対して2を足す。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 1, 2, 3, 4, 5 }; for(int i = 0;i < array.Length; i++) { array[i] = array[i] + 2; } foreach (var item in array) { Console.WriteLine(item); } } } } |
result
3
4
5
6
7
繰り返しでそれぞれ2を足しています。
続けてLinqを使用した例です。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 1, 2, 3, 4, 5 }; array = array.Select(n => n + 2).ToArray(); foreach (var item in array) Console.WriteLine(item); } } } |
result
3
4
5
6
7
繰り返し文を使用して各要素にプラス2をしなければならなかった処理がLinqを使用すると1行で書けています。 これがLinqの強みです。=>は矢印を表しています。
=>はデリゲートを省略したものと覚えて頂ければいいのですが、今回の記事では重要ではないです。
ココがポイント
ここでは、「引数(配列の各要素) => return文の結果」と考えて頂ければと思います。
もう1つ、Selectメソッドを使用した例を書いていきます。
1 |
array.Select(n => n + 2).ToArray(); |
行いたい処理
string型の配列の全ての文字列に「マン」を追加する。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; class Program { static void Main(string[] args) { string[] rockman1 = new string[] { "ロック", "ファイヤー", "アイス", "エレキ", "カット" , "ボンバー", "ガッツ"}; for (int i = 0; i < rockman1.Length; i++) { rockman1[i] = rockman1[i] + "マン"; } foreach (var item in rockman1) { Console.WriteLine(item); } } } |
result
ロックマン
ファイヤーマン
アイスマン
エレキマン
カットマン
ボンバーマン
ガッツマン
ゲームが好きな人なら知っているロックマン1のボス達ですね!! 😛 (勿論ロックマン以外)
続けて、Linqを使用した例を見てみましょう!
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Linq; class Program { static void Main(string[] args) { string[] rockman1 = new string[] { "ロック", "ファイヤー", "アイス", "エレキ", "カット" , "ボンバー", "ガッツ"}; rockman1 = rockman1.Select(n => n + "マン").ToArray(); foreach (var item in rockman1) { Console.WriteLine(item); } } } |
result
ロックマン
ファイヤーマン
アイスマン
エレキマン
カットマン
ボンバーマン
ガッツマン
Linqの処理は下記の1行です!文字列に対しても簡単に出来ます。
1 |
rockman1.Select(n => n + "マン").ToArray(); |
こちらも左辺は引数(配列の各要素)、右辺は戻り値の結果と考えてください。
イメージとして、下記の表をみると分かりやすいかもしれません。
左辺:引数(配列の各要素) | 右辺:戻り値の結果 |
ロック | ロックマン |
ファイヤー | ファイヤーマン |
アイス | アイスマン |
エレキ | エレキマン |
カット | カットマン |
ボンバー | ボンバーマン |
ガッツ | ガッツマン |
Whereメソッドの使い方
LinqのWhereメソッドについて
続けてWhereメソッドの使い方の例を見てみましょう。
行いたい処理
int型配列の中で偶数の条件のみ取りだし、新しい配列を作成する。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { const int arraysize = 6; int[] array = new int[arraysize] { 1, 2, 3, 4, 5 ,6}; int[] array2 = new int[arraysize / 2]; for(int i = 0; i < array.Length; i++) { if(array[i] % 2 == 0) { array2[i / 2] = array[i]; } } foreach(var item in array2) { Console.WriteLine(item); } } } } |
result
2
4
6
普通に処理しようとすると中々大変ですね 😐 続けてLinqを使った例を見てみます。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { const int arraysize = 6; int[] array = new int[arraysize] { 1, 2, 3, 4, 5 ,6}; int[] array2 = new int[arraysize / 2]; array2 = array.Where(n => n % 2 == 0).ToArray(); foreach(var item in array2) { Console.WriteLine(item); } } } } |
result
2
4
6
Linqのパワー凄くないですか?1行で目的のソースコードが出来てしまいました。
ココがポイント
Linqのソースコードは下記の部分ですね。=>の左辺には配列の各値の引数を右辺には条件を記述します。右辺に記述した条件の結果(true、false)を返します。
Whereメソッドでは、結果がtrueとなる値のみ残してくれます。
1 |
array.Where(n => n % 2 == 0).ToArray(); |
もう1つ、文字列の配列を例としてWhereメソッドを使用してみましょう!
行いたい処理
string型の配列から「マン」が付いている文字列のみ出力できるようにしてください。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { string[] rockman1 = new string[] { "ロックマン", "ロールちゃん", "ワイリー","エレキマン","イエローデビル", "カットマン", "ボンバーマン" }; var rockman1list = new List<string>(); for(var i = 0;i < rockman1.Length; i++) { if (rockman1[i].Contains("マン")) { rockman1list.Add(rockman1[i]); } } foreach (var item in rockman1list) { Console.WriteLine(item); } } } |
result
ロックマン
エレキマン
カットマン
ボンバーマン
配列の代入するのがめんどくさそうだったので、Listに代入しちゃいました 👿
Linqを使用すれば、そんな余計なことを考えずに配列そのまま変えるが出来ます!!
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Linq; class Program { static void Main(string[] args) { string[] rockman1 = new string[] { "ロックマン", "ロールちゃん", "ワイリー","エレキマン","イエローデビル", "カットマン", "ボンバーマン" }; rockman1 = rockman1.Where(n => n.Contains("マン")).ToArray(); foreach (var item in rockman1) { Console.WriteLine(item); } } } |
result
ロックマン
エレキマン
カットマン
ボンバーマン
こちらも左辺は引数(配列の各要素)、右辺に記述した条件の戻り値の結果(true、false)と考えてください。
こちらもイメージとして、下記の表を作りました。
左辺:引数(配列の各要素) | 右辺:条件の戻り値の結果(条件はContains("マン")) |
ロックマン | true |
ロールちゃん | false |
ワイリー | false |
エレキマン | true |
イエローデビル | false |
カットマン | true |
ボンバーマン | true |
Whereメソッドでは、上記のtrueの要素のみ残るという訳ですね!!
Whereメソッドの使い方は以上です!
SelectメソッドとWhereメソッドを組み合わせる
SelectメソッドとWhereメソッドを一緒に使う例1
WhereとSelectメソッドを一緒に使用することも可能です。
行いたい処理
5以上の要素のみを2倍にした値を取り出したい。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array1 = new int[] {3,6,5,3,8,2,1,9,3}; var results = array1.Where(n => n >= 5).Select(n => n * 2).ToArray(); foreach(var item in results) Console.WriteLine(item); } } } |
result
12
10
16
18
5以上の値が2倍になって返ってきてますね!Whereで5以上のみ抽出し、抽出した値にSelectで2を掛けています。
SelectメソッドとWhereメソッドを一緒に使う例2
String型の配列のパターンもやってみます。
行いたい処理
文字列にaを含む要素だけ取り出し、語尾にmanをつける。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { string[] array1 = new string[] {"ice","rock","air","cut","wood"}; var results = array1.Where(n => n.Contains("a")).Select(n => n + "man").ToArray(); foreach(var item in results) Console.WriteLine(item); } } } |
result
airman
Whereを使うときは相方としてContainsもよく使うのでぜひ一緒に覚えてください。
今回の場合はaを含むとしました。対象となるのはエアーマンだけしたね。
リストでも同じことができます。
行いたい処理
文字列にoを含む要素だけ取り出し、語尾にmanをつける。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<string> list = new List<string>(); list.Add("ice"); list.Add("rock"); list.Add("air"); list.Add("cut"); list.Add("wood"); var results = list.Where(n => n.Contains("o")).Select(n => n + "man").ToArray(); foreach(var item in results) Console.WriteLine(item); } } } |
result
rockman
woodman
リストでも基本的に同様です。
このようにLinqは組み合わせて使うとさらに便利に使うことが可能です。
このように使うことが可能なのは、Whereメソッド、Selectメソッド両方ともIEnumerable型で結果を返してくれるからです。
さらに、配列やリストはIEnumerableを実装しているので、配列化やリスト化も自由にできます。
この点を覚えておけば、どんどんLinqを扱っていけると思います!
他のLinqの記事についてはこちら
まとめ
今回の記事ではLinqの記事1回目として下記のメソッドを取り上げました。
今回のメソッド一覧
- Select
- Where
他のメソッドも別記事で紹介しますが、まず一番よく使用するSelectメソッドとWhereメソッドでLinqの処理の動きを覚えてマスターしていきましょう!
今回の記事は以上とします。他メソッドについても別記事で沢山紹介していきますね。
最後まで見て頂きありがとうございました。
次回の記事はこちらです。次回はLinqのAllメソッドとAnyメソッドについてです!
CHECK
-
【C# sharp Linq】Anyメソッド、Allメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinq記事についてはこちらに纏めてあります!!
他のLinqの記事についてはこちら
Linqの使い方に慣れてきて、自身のある方は演習問題にチャレンジしてみよう!!
他の演習問題はこちら