C#の『SelectMany』の使い方が分からない…教えてください!
C#を学んでいるけど…
「SelectManyの使い方が分からない」
このような疑問を持っていませんか?
この記事では、LINQのひとつである『SelectMany』について現役エンジニアが分かりやすく解説します。
まだ、C#の開発環境構築が出来ていない方はこちらを参考にしてください。
SelectManyの使い方
SelectManyの使い方を解説する前に、SelectManyで何が出来るのかを把握しておきましょう。
SelectMany = 複数のリストをひとつのリストにまとめる
このような考え方で問題ありません。SelectManyを使用すると指定したリストの複数のリストを一つのリストにまとめて出力することが出来ます。
それでは、実際のコードを用いながらSelectManyの使い方を解説していきます。
まずは、SelectManyの使い方から説明します。SelectManyを使うときには以下のように記述します。
リスト.SelectMany(ひとつにまとめるリスト名)
実際のコードを用いながらSelectManyの使い方を解説していきます。
SelectManyを使ってシーケンスを出力するときには以下のように記述します。
using System;
using System.Collections.Generic;
using System.Linq;
namespace sample
{
class LinqSelectMany
{
private class Goods
{
/// <summary>商品名</summary>
public string Name { get; set; }
/// <summary>値段(単価)</summary>
public int Price { get; set; }
/// <summary>販売個数(日次)</summary>
public List<int> Numbers { get; set; }
}
static public void BlogLinqSelectMany()
{
// 商品を変数goodsとして宣言・初期化
var goods = new List<Goods>(){
new Goods() { Name = "リンゴ", Price = 100, Numbers = new List<int>(){ 1000, 1050, 800 } },
new Goods() { Name = "オレンジ", Price = 300, Numbers = new List<int>(){ 2000, 3500, 5000 } },
new Goods() { Name = "バナナ", Price = 200, Numbers = new List<int>(){ 9000, 5830, 4600, 8000 } },
new Goods() { Name = "スイカ", Price = 400, Numbers = new List<int>(){ 10, 50, 40 } },
new Goods() { Name = "モモ", Price = 400, Numbers = new List<int>(){ 10, 60 } },
};
// NumversのみのSelectMany
var numlist = goods.SelectMany(val => val.Numbers);
var numlistsum = goods.SelectMany(val => val.Numbers).Sum();
// SelectManyの実行結果を出力
Console.WriteLine($"Select適用後のリストの値\n");
Console.WriteLine($"日ごと商品ごと販売個数");
Console.WriteLine("{0}", string.Join(", ", goods.SelectMany(x => x.Numbers)));
Console.WriteLine($"\n");
Console.WriteLine($"全商品合計販売個数");
Console.WriteLine("{0}", string.Join(", ", goods.SelectMany(x => x.Numbers).Sum()));
}
}
}
サンプルコードを実行した際の出力結果は、以下のようになります。
Select適用後のリストの値
日ごと商品ごと販売個数
1000, 1050, 800, 2000, 3500, 5000, 9000, 5830, 4600, 8000, 10, 50, 40, 10, 60
全商品合計販売個数
40950
注目していただきたいのは、SelectManyを適用した後のリストの値に重複が無いことです。
リスト.SelectMany(ひとつにまとめるリスト名)
これを基にサンプルコードを解説すると、「リスト = goods」となります。
つまり、リスト(goods)にSelectManyを適用し、Numbers(ひとつにまとめるリスト名)をまとめた結果を出力(Console.WriteLine)するということです。
このようにして、C#ではSelectManyを使用することで、複数のリストをひとつのリストにするコードを簡潔に書くことが出来ます。
【まとめ】SelectManyは複数のリストをひとつにまとめる
SelectManyの使い方は理解できましたか?
この記事では、C#のSelectManyの使い方について紹介しました。
最後になりますが、ここに関してもっと詳しく教えて欲しいときなどは、遠慮なく、お問い合わせ、コメント、Twitterにてご連絡ください。
最後までお読みいただきありがとうございました。