C#のLINQの関数であるConcat()
の使い方についてです。
配列やリストを、別の配列やリストと合体することができます。
この記事には.NET Framework 4.6.1を使用しています。
配列やリストを合体だ
巨大な敵が現れた場合、あなたはどうしますか。
当然のことながら、仲間たちと合体して巨大ロボになることが最適解ですよね。
配列やリストを別の配列やリストと合体したいときは、LINQのConcat()
を使いましょう。
public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, IEnumerable<TSource> second );
https://msdn.microsoft.com/ja-jp/library/bb302894.aspx
使い方も簡単で、引数に合体したい配列やリストを指定するだけです。
Program.cs
using System.Linq; using System.Collections; using System.Collections.Generic; public static class Program { static void Main( string[] args ) { // 数字データ int[] numbersA = new int[] { 0, 1, 2, 3, 4, 5, }; int[] numbersB = new int[] { 9, 8, 7, 6, 5, 4, }; // さあ、合体だ IEnumerable<int> concatAB = numbersA.Concat( numbersB ); IEnumerable<int> concatBA = numbersB.Concat( numbersA ); // 結果発表 System.Console.WriteLine( "numbersA:{0}", numbersA.Text() ); System.Console.WriteLine( "numbersB:{0}", numbersB.Text() ); System.Console.WriteLine( "concatAB:{0}", concatAB.Text() ); System.Console.WriteLine( "concatBA:{0}", concatBA.Text() ); // 入力待ち用 System.Console.ReadKey(); } /// <summary> /// 簡易的なコレクションのテキスト取得処理 /// </summary> public static string Text( this IEnumerable i_source ) { string text = string.Empty; foreach( var value in i_source ) { text += string.Format( "[{0}], ", value ); } return text; } } // class Program
numbersA:[0], [1], [2], [3], [4], [5],
numbersB:[9], [8], [7], [6], [5], [4],
concatAB:[0], [1], [2], [3], [4], [5], [9], [8], [7], [6], [5], [4],
concatBA:[9], [8], [7], [6], [5], [4], [0], [1], [2], [3], [4], [5],
見事二つの配列が合体して、巨大なシーケンスになりました。
これで巨大な敵が街を襲ってきても対応できると思います。
配列とリストを合体できるのか
先ほどは、同じ型の配列同士をConcat()
を使って合体しました。
では、同じ型の配列とList
は合体できるのでしょうか。
試してみましょう。
Program.cs
using System.Linq; using System.Collections; using System.Collections.Generic; public static class Program { static void Main( string[] args ) { // 数字データ int[] numbersA = new int[] { 0, 1, 2, 3, 4, 5, }; List<int> numbersB = new List<int> { 9, 8, 7, 6, 5, 4, }; // さあ、合体だ IEnumerable<int> concatAB = numbersA.Concat( numbersB ); IEnumerable<int> concatBA = numbersB.Concat( numbersA ); // 結果発表 System.Console.WriteLine( "numbersA:{0}", numbersA.Text() ); System.Console.WriteLine( "numbersB:{0}", numbersB.Text() ); System.Console.WriteLine( "concatAB:{0}", concatAB.Text() ); System.Console.WriteLine( "concatBA:{0}", concatBA.Text() ); // 入力待ち用 System.Console.ReadKey(); } /// <summary> /// 簡易的なコレクションのテキスト取得処理 /// </summary> public static string Text( this IEnumerable i_source ) { string text = string.Empty; foreach( var value in i_source ) { text += string.Format( "[{0}], ", value ); } return text; } } // class Program
numbersA:[0], [1], [2], [3], [4], [5],
numbersB:[9], [8], [7], [6], [5], [4],
concatAB:[0], [1], [2], [3], [4], [5], [9], [8], [7], [6], [5], [4],
concatBA:[9], [8], [7], [6], [5], [4], [0], [1], [2], [3], [4], [5],
この場合でも合体できることが確認できました。
こんな感じでConcat()
を七兆回ほど使って、合体させまくってみてください。
LINQのリンク
LINQ一覧
www.urablog.xyzZip
異なる型のシーケンス(配列やリスト)同士を合体したい!
www.urablog.xyz