今回のテーマ
こんばんは、サルモリです。
今回もLinqのメソッドを紹介してきます。今回紹介するメソッドは下記です。
今回のテーマ
Linqのメソッド、ToLookup、Zipの使い方
今回はToLookup、Zipメソッドについて解説します。ToLookupはGroupByと用途がとても似ていますが、活躍する場面が多少違うので、
今回の記事として書くことにしました。
GroupByは下記の記事をみてください。
CHECK
-
【C# sharp Linq】GroupByを使ってグループ化しよう。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら
Linqの演習問題はこちら
他の演習問題はこちら
ToLookup、Zipについて
ToLookup
指定した要素においてグループ化を行う。生成されたILookup型はキーを直接指定してアクセスが可能。
Zip
2つの配列から結びつきのある別の配列に作成する。
Linqメソッドの解説の流れ
下記の流れで説明したいと思います。
行いたい処理の例を書きます。
Linqを使用するソースコードを書いていきます。
ソースコードには、リスト、配列を使います。
定義するクラスについて
今回、ToLookupを説明するときに使用するクラスです。GroupByの説明の時と同じものを使用します。
使用するクラス
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 27 28 |
class Robot { string name, color, skill,maker; public Robot(string _name,string _color,string _skill,string _maker) { name = _name; color = _color; skill = _skill; maker = _maker; } public String Name { get { return name; } } public String Color { get { return color; } } public String Skill { get { return skill; } } public String Maker { get { return maker; } } } |
ToLookupの使い方
GroupByの使い方について、例を書いていきます。今回行いたい処理です。
行いたい処理
メーカーで別々のリストを作りたい。
メーカーでグループ分け
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 27 28 29 30 31 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Blue", "Rock Buster","Dr Light")); robotlist.Add(new Robot("Fireman", "Red", "Firestorm","Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", "Ice Slasher", "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", "thunder Beam", "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", "Clean", "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", "Air Shooter", "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", "Leaf Shield", "Dr Wily")); var Makerlist = robotlist.ToLookup(x => x.Maker); foreach(var maker in Makerlist) { foreach(var item in maker) { Console.Write("Maker:" + item.Maker); Console.WriteLine(" Name:" + item.Name); } Console.WriteLine("-------------------------------"); } } } } |
result
Maker:Dr Light Name:Rockman
Maker:Dr Light Name:Roll
-------------------------------
Maker:Dr Wily Name:Fireman
Maker:Dr Wily Name:Iceman
Maker:Dr Wily Name:Elecman
Maker:Dr Wily Name:Airman
Maker:Dr Wily Name:Woodman
-------------------------------
上記の例をみて分かるように、Groupbyと使い方は何も変わらないです。
ライト博士のロボットリストとワイリー博士のロボットリストが作成されてます。
ToLookUpでは何が出来るかというと、キーを指定してアクセスすることが可能です。
下記の例を見てください。
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 27 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Blue", "Rock Buster","Dr Light")); robotlist.Add(new Robot("Fireman", "Red", "Firestorm","Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", "Ice Slasher", "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", "thunder Beam", "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", "Clean", "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", "Air Shooter", "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", "Leaf Shield", "Dr Wily")); var Makerlist = robotlist.ToLookup(x => x.Maker); var lightMakerlist = Makerlist["Dr Light"]; foreach(var item in lightMakerlist) { Console.WriteLine(item.Name); } } } } |
result
Rockman
Roll
ライト博士を指定して、ライト博士のロボットのリストを取り出すことが出来ております。ToLookupではこのような操作が可能です。
このメリットを活かすためにToLookupを使うときはToListやToArrayと同じようにLinqメソッドの最後に指定したほうがいいでしょう。
Zipの使い方
次はZipメソッドの使い方について解説します。
行いたい処理
名前配列とメーカー配列をName:名前 Maker:メーカー名と出力したい
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.Collections.Generic; using System.Linq; namespace ConsoleApp3 { class Program { static void Main(string[] args) { String[] arrayName = new string[] { "Rockman", "Fireman", "Iceman", "Elecman", "Roll", "Airman"}; String[] arrayMaker = new string[] { "Dr Light", "Dr Wily", "Dr Wily", "Dr Wily", "Dr Light", "Dr Wily" }; var arrayRobot = arrayName.Zip(arrayMaker, (z1, z2) => "Name:" + z1 + " Maker:" + z2); foreach(var item in arrayRobot) { Console.WriteLine(item); } } } } |
result
Name:Rockman Maker:Dr Light
Name:Fireman Maker:Dr Wily
Name:Iceman Maker:Dr Wily
Name:Elecman Maker:Dr Wily
Name:Roll Maker:Dr Light
Name:Airman Maker:Dr Wily
2つの配列が同じインデックスによって、結びつきがある場合に使用することができます。
あまり使う場面はないかもしれませんが、使う場面があると、とても強力なので覚えておきましょう。
まとめ
今回もLinqメソッドの紹介記事でした。今回の取り上げたメソッドを下記に纏めます。
今回のメソッド一覧
- ToLookup
- Zip
今回は上記のメソッドについて、紹介しました。Linqメソッド紹介の記事については、多くても2記事くらいで終わりにしたいと思います。
よく使うものから、あまり使わないものまで紹介してきましたが、覚えておいて損はないメソッドばっかなので、ぜひ覚えてくださいね。
これからは組み合わせて使う記事を増やしていこうと思うので、よろしくお願いします。
他のLinqの記事についてはこちら
Linqの演習問題はこちら
他の演習問題はこちら