SelectManyメソッド
単純な配列に対して処理する場合は、SELECTメソッドで処理できますが、配列に配列を持つようなコレクションは少し面倒です。
例えば、
List<string[]> values = new List<string[]> {new string[] { "京都府", "京都市"}, new string[] { "奈良県", "奈良市"}, new string[] { "大阪府", "大阪市"}, new string[] { "兵庫県", "神戸市"}, new string[] { "和歌山", "和歌山市"}};
Dim values As New List(Of String()) From {New String() {"京都府", "京都市"}, New String() {"奈良県", "奈良市"}, New String() {"大阪府", "大阪市"}, New String() {"兵庫県", "神戸市"}, New String() {"和歌山", "和歌山市"}}
このようなコレクションです。
これを一つのコレクションにするには、SelectメソッドでString.Joinメソッドなどを複合的に利用して処理する必要があります。
var res = values.Select(x => String.Join(",", x)).ToArray(); Console.WriteLine(String.Join(",", res));
Dim res = values.Select(Function(x) String.Join(",", x)).ToArray() Console.WriteLine(String.Join(",", res))
京都府,京都市,奈良県,奈良市,大阪府,大阪市,兵庫県,神戸市,和歌山,和歌山市
これはSelectManyメソッドを使用すると簡単に一つのコレクションへ変形できます。この処理を「平坦化」と呼びます。
var res = values.SelectMany(x => x).ToArray();
Console.WriteLine(String.Join(",", res));
Dim res = values.SelectMany(Function(x) x).ToArray() Console.WriteLine(String.Join(",", res))
京都府,京都市,奈良県,奈良市,大阪府,大阪市,兵庫県,神戸市,和歌山,和歌山市