【C#入門】SelectManyの使い方を解説【LINQ】


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」となります。

つまり、リスト(goodsSelectManyを適用し、Numbers(ひとつにまとめるリスト名)をまとめた結果を出力(Console.WriteLine)するということです。

このようにして、C#ではSelectManyを使用することで、複数のリストをひとつのリストにするコードを簡潔に書くことが出来ます。

【まとめ】SelectManyは複数のリストをひとつにまとめる

SelectManyの使い方は理解できましたか?

まとめ

  • SelectMany = 複数のリストをひとつのリストにまとめる
  • リスト.SelectMany(ひとつにまとめるリスト名)

この記事では、C#のSelectManyの使い方について紹介しました。

最後になりますが、ここに関してもっと詳しく教えて欲しいときなどは、遠慮なく、お問い合わせ、コメント、Twitterにてご連絡ください。

最後までお読みいただきありがとうございました。

Tech Academy

  • 受講者数No.1のプログラミングスクール
  • 通過率10%の選考に合格した優秀な講師
  • カリキュラムを閲覧制限なし
  • コースの種類が豊富
  • オンラインで完結
  • 無料体験あり
  • 無料カウンセリングあり
  • 学割あり

\ 公式サイトはこちら /

Tech Academy 公式サイト