<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=LINQ_-_%E9%9B%86%E8%A8%88</id>
	<title>LINQ - 集計 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=LINQ_-_%E9%9B%86%E8%A8%88"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=LINQ_-_%E9%9B%86%E8%A8%88&amp;action=history"/>
	<updated>2026-06-16T23:49:33Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=LINQ_-_%E9%9B%86%E8%A8%88&amp;diff=11247&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == LINQの集計に関する拡張メソッドは、コレクション内の要素を効率的に処理して、単一の結果を得るために使用される。&lt;br&gt; &lt;br&gt; これらのメソッドは、データ分析やビジネスロジックの実装において有効である。&lt;br&gt; 例えば、売上データの分析や、ユーザーの行動パターンの把握などに活用できる。&lt;br&gt; &lt;br&gt; 実例としては、顧客の年齢データか…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=LINQ_-_%E9%9B%86%E8%A8%88&amp;diff=11247&amp;oldid=prev"/>
		<updated>2024-09-27T03:29:23Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == LINQの集計に関する拡張メソッドは、コレクション内の要素を効率的に処理して、単一の結果を得るために使用される。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; これらのメソッドは、データ分析やビジネスロジックの実装において有効である。&amp;lt;br&amp;gt; 例えば、売上データの分析や、ユーザーの行動パターンの把握などに活用できる。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; 実例としては、顧客の年齢データか…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
LINQの集計に関する拡張メソッドは、コレクション内の要素を効率的に処理して、単一の結果を得るために使用される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
これらのメソッドは、データ分析やビジネスロジックの実装において有効である。&amp;lt;br&amp;gt;&lt;br /&gt;
例えば、売上データの分析や、ユーザーの行動パターンの把握などに活用できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
実例としては、顧客の年齢データから最年少と最年長の顧客を特定して、平均年齢を計算するシナリオが考えられる。&amp;lt;br&amp;gt;&lt;br /&gt;
このような場合、Minメソッド、Maxメソッド、Averageメソッドを組み合わせて効果的に情報を抽出することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Maxメソッドは、シーケンス内の最大値を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
数値型だけでなく、比較可能な任意の型に対して使用できる。&amp;lt;br&amp;gt;&lt;br /&gt;
空のシーケンスに対して呼び出すと例外が発生するため、注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Minメソッドは、シーケンス内の最小値を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
Maxメソッドと同様、様々な型に対して使用できる。&amp;lt;br&amp;gt;&lt;br /&gt;
空のシーケンスへの対応にも同じ注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Averageメソッドは、数値シーケンスの平均値を計算する。&amp;lt;br&amp;gt;&lt;br /&gt;
整数型や浮動小数点型のシーケンスに対して使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
結果は、常に浮動小数点型となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sumメソッドは、数値シーケンスの合計を計算する。&amp;lt;br&amp;gt;&lt;br /&gt;
整数型や浮動小数点型のシーケンスに対して使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
大きな値の合計を計算する際はオーバーフローに注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Countメソッドは、シーケンス内の要素数を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
条件を指定して、特定の条件を満たす要素の数を数えることも可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
大規模なコレクションでは、パフォーマンスに影響を与える可能性がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Aggregateメソッドは、カスタム集計操作を実行する。&amp;lt;br&amp;gt;&lt;br /&gt;
より複雑な集計ロジックを実装する場合に使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
初期値とラムダ式を指定して、シーケンスの各要素に対して累積的に操作を適用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
パフォーマンスの観点からは、これらのメソッドは一般的に効率的であるが、大規模なデータセットを扱う場合には注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
特に、複数の集計操作を行う場合、可能な限り1度のイテレーションで処理するよう設計することが重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 結果の表示 ==&lt;br /&gt;
ここでは、結果の表示において、独自の拡張メソッドToResult(this IEnumerable)を使用している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
 // 結果表示用の拡張メソッド&lt;br /&gt;
 public static String ToResult&amp;lt;TSource&amp;gt;(this IEnumerable&amp;lt;TSource&amp;gt; source)&lt;br /&gt;
 {&lt;br /&gt;
    return &amp;quot;{&amp;quot; + string.Join(&amp;quot;, &amp;quot;, source) + &amp;quot;}&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public static String ToResult&amp;lt;TKey, TSource&amp;gt;(this IEnumerable&amp;lt;IGrouping&amp;lt;TKey, TSource&amp;gt;&amp;gt; source)&lt;br /&gt;
 {&lt;br /&gt;
    return source.Select(group =&amp;gt; string.Format(&amp;quot;Key={0}, Source={1}&amp;quot;, group.Key, group.ToResult())).ToResult();&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 集計 ==&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | style=&amp;quot;background-color:#fefefe;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#66CCFF;&amp;quot; | メソッド名 &lt;br /&gt;
! style=&amp;quot;background-color:#66CCFF;&amp;quot; | 機能&lt;br /&gt;
|-&lt;br /&gt;
| Max || 最大値を返す。&lt;br /&gt;
|-&lt;br /&gt;
| Min || 最小値を返す。&lt;br /&gt;
|-&lt;br /&gt;
| Average || 平均値を返す。&lt;br /&gt;
|-&lt;br /&gt;
| Sum || 合計を返す。&lt;br /&gt;
|-&lt;br /&gt;
| Count || 要素数を返す。&lt;br /&gt;
|-&lt;br /&gt;
| Aggregate || アキュムレータ関数で処理した結果を返す。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
 // 基本的な例&lt;br /&gt;
 var source = new[] { 3, 4, 5, 6, 7, 8, 9, 9 };&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Max());&lt;br /&gt;
 // -&amp;gt; 9&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Min());&lt;br /&gt;
 // -&amp;gt; 3&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Average());&lt;br /&gt;
 // -&amp;gt; 6.375&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Sum());&lt;br /&gt;
 // -&amp;gt; 51&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Count());&lt;br /&gt;
 // -&amp;gt; 8&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine(source.Aggregate((now, next) =&amp;gt; now * next));&lt;br /&gt;
 // -&amp;gt; 1632960&lt;br /&gt;
 &lt;br /&gt;
 // 参考：標本分散&lt;br /&gt;
 double ave = source.Average();&lt;br /&gt;
 Console.WriteLine(source.Sum(e =&amp;gt; Math.Pow(e - ave, 2)) / source.Count());&lt;br /&gt;
 // -&amp;gt; 4.484375&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // 応用例&lt;br /&gt;
 List&amp;lt;Product&amp;gt; products = new List&amp;lt;Product&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
    new Product { Name = &amp;quot;Apple&amp;quot;,  Price = 0.5m, Stock = 100 },&lt;br /&gt;
    new Product { Name = &amp;quot;Banana&amp;quot;, Price = 0.3m, Stock = 150 },&lt;br /&gt;
    new Product { Name = &amp;quot;Orange&amp;quot;, Price = 0.6m, Stock = 80 },&lt;br /&gt;
    new Product { Name = &amp;quot;Mango&amp;quot;,  Price = 1.2m, Stock = 30 }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;最も高価な商品: {products.Max(p =&amp;gt; p.Price)}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 1.2&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;最も安価な商品: {products.Min(p =&amp;gt; p.Price)}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 0.3&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;平均価格: {products.Average(p =&amp;gt; p.Price):C}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 0.65&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;総在庫数: {products.Sum(p =&amp;gt; p.Stock)}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 360&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;0.5ドル以上の商品数: {products.Count(p =&amp;gt; p.Price &amp;gt;= 0.5m)}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 3&lt;br /&gt;
 &lt;br /&gt;
 decimal totalValue = products.Aggregate(0m, (total, product) =&amp;gt; total + (product.Price * product.Stock));&lt;br /&gt;
 Console.WriteLine($&amp;quot;総在庫価値: {totalValue:C}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 177.00&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // 複合的な使用例&lt;br /&gt;
 var summary = new&lt;br /&gt;
 {&lt;br /&gt;
    MostExpensive = products.OrderByDescending(p =&amp;gt; p.Price).First().Name,&lt;br /&gt;
    AveragePrice = products.Average(p =&amp;gt; p.Price),&lt;br /&gt;
    TotalStock = products.Sum(p =&amp;gt; p.Stock),&lt;br /&gt;
    TotalValue = totalValue&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;最も高価な商品: {summary.MostExpensive}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; Mango&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;平均価格: {summary.AveragePrice:C}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 0.65&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;総在庫数: {summary.TotalStock}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 360&lt;br /&gt;
 &lt;br /&gt;
 Console.WriteLine($&amp;quot;総在庫価値: {summary.TotalValue:C}&amp;quot;);&lt;br /&gt;
 // -&amp;gt; 177.00&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:C_Sharp]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>