[C#/LINQ] Sumメソッドの使い方 – 要素の合計値を計算する
C#のLINQにおけるSumメソッド
は、コレクション内の数値要素の合計を計算するために使用されます。
Sum
は整数や浮動小数点数などの数値型に対して使用でき、コレクションが空の場合は0を返します。
例えば、IEnumerable<int>
やList<double>
などのコレクションに対してSum()
を呼び出すことで、全要素の合計を取得できます。
また、オブジェクトのプロパティを合計する場合は、ラムダ式を使って特定のプロパティを指定することも可能です。
Sumメソッドとは
C#のLINQ(Language Integrated Query)におけるSumメソッド
は、コレクション内の数値要素の合計を計算するための便利な機能です。
このメソッドは、配列やリストなどのコレクションに対して使用でき、数値型のデータを持つ要素を簡単に合計することができます。
Sumメソッド
は、特にデータ分析や集計処理を行う際に非常に役立ちます。
Sumメソッド
は、基本的に次のように使用されます。
コレクションに対してSumメソッド
を呼び出すことで、要素の合計値を取得できます。
例えば、整数のリストがある場合、そのリストの全ての整数を合計することができます。
LINQを使用することで、コードがシンプルになり、可読性も向上します。
これにより、開発者はより効率的にプログラミングを行うことが可能になります。
Sumメソッドの基本的な使い方
数値型コレクションに対するSumの使用例
数値型のコレクションに対してSumメソッド
を使用する基本的な例を見てみましょう。
以下のコードでは、整数のリストを作成し、その合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 整数のリストを作成
int total = numbers.Sum(); // Sumメソッドを使用して合計を計算
Console.WriteLine($"合計: {total}"); // 合計を出力
}
}
合計: 15
空のコレクションに対するSumの挙動
空のコレクションに対してSumメソッド
を使用すると、結果は0になります。
以下のコードでは、空のリストに対してSumメソッド
を適用しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> emptyList = new List<int>(); // 空のリストを作成
int total = emptyList.Sum(); // Sumメソッドを使用
Console.WriteLine($"合計: {total}"); // 合計を出力
}
}
合計: 0
null値を含むコレクションに対するSumの挙動
null値を含むコレクションに対してSumメソッド
を使用すると、例外が発生します。
以下のコードでは、null値を含むリストに対してSumメソッド
を適用しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int?> numbersWithNulls = new List<int?> { 1, 2, null, 4, 5 }; // nullを含むリストを作成
int total = numbersWithNulls.Sum() ?? 0; // nullを無視して合計を計算
Console.WriteLine($"合計: {total}"); // 合計を出力
}
}
合計: 12
ラムダ式を使ったSumの使用例
ラムダ式を使用することで、特定の条件に基づいて合計を計算することができます。
以下のコードでは、特定の条件を満たす要素の合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 整数のリストを作成
int total = numbers.Where(n => n > 2).Sum(); // 2より大きい数の合計を計算
Console.WriteLine($"合計: {total}"); // 合計を出力
}
}
合計: 12
このように、Sumメソッド
はさまざまな状況で利用でき、非常に柔軟な機能を提供します。
オブジェクトコレクションに対するSumの使い方
特定のプロパティを合計する方法
オブジェクトコレクションに対してSumメソッド
を使用する場合、特定のプロパティの合計を計算することができます。
以下の例では、Productクラス
のPrice
プロパティを持つオブジェクトのリストから、合計金額を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000 },
new Product { Name = "商品B", Price = 1500 },
new Product { Name = "商品C", Price = 2000 }
}; // 商品のリストを作成
decimal totalPrice = products.Sum(p => p.Price); // Priceプロパティの合計を計算
Console.WriteLine($"合計金額: {totalPrice}"); // 合計金額を出力
}
}
合計金額: 4500
匿名型を使ったSumの使用例
匿名型を使用することで、特定のプロパティを持つオブジェクトを簡単に作成し、その合計を計算することができます。
以下の例では、匿名型を使って商品名と価格を持つオブジェクトを作成し、価格の合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var products = new[]
{
new { Name = "商品A", Price = 1000 },
new { Name = "商品B", Price = 1500 },
new { Name = "商品C", Price = 2000 }
}; // 匿名型の配列を作成
decimal totalPrice = products.Sum(p => p.Price); // Priceプロパティの合計を計算
Console.WriteLine($"合計金額: {totalPrice}"); // 合計金額を出力
}
}
合計金額: 4500
複数のプロパティを合計する方法
複数のプロパティを合計する場合、Sumメソッド
を使ってそれぞれのプロパティを合計し、最終的な合計を計算することができます。
以下の例では、Productクラス
にQuantity
プロパティを追加し、価格と数量の合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
public int Quantity { get; set; } // 数量
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000, Quantity = 2 },
new Product { Name = "商品B", Price = 1500, Quantity = 3 },
new Product { Name = "商品C", Price = 2000, Quantity = 1 }
}; // 商品のリストを作成
decimal totalValue = products.Sum(p => p.Price * p.Quantity); // 価格と数量の合計を計算
Console.WriteLine($"合計金額: {totalValue}"); // 合計金額を出力
}
}
合計金額: 8500
このように、Sumメソッド
を使用することで、オブジェクトコレクションの特定のプロパティや複数のプロパティの合計を簡単に計算することができます。
Sumメソッドの応用例
条件付きで合計を計算する方法(Where句との併用)
Sumメソッド
は、Where句と組み合わせることで、特定の条件を満たす要素の合計を計算することができます。
以下の例では、価格が1500以上の商品だけを対象に合計金額を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000 },
new Product { Name = "商品B", Price = 1500 },
new Product { Name = "商品C", Price = 2000 }
}; // 商品のリストを作成
decimal totalPrice = products
.Where(p => p.Price >= 1500) // 価格が1500以上の商品をフィルタリング
.Sum(p => p.Price); // 合計を計算
Console.WriteLine($"合計金額: {totalPrice}"); // 合計金額を出力
}
}
合計金額: 3500
グループ化されたデータに対する合計(GroupByとの併用)
GroupByメソッド
を使用することで、データをグループ化し、各グループの合計を計算することができます。
以下の例では、商品をカテゴリごとにグループ化し、各カテゴリの合計金額を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
public string Category { get; set; } // カテゴリ
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000, Category = "カテゴリ1" },
new Product { Name = "商品B", Price = 1500, Category = "カテゴリ1" },
new Product { Name = "商品C", Price = 2000, Category = "カテゴリ2" }
}; // 商品のリストを作成
var totalByCategory = products
.GroupBy(p => p.Category) // カテゴリでグループ化
.Select(g => new
{
Category = g.Key,
TotalPrice = g.Sum(p => p.Price) // 各グループの合計を計算
});
foreach (var item in totalByCategory)
{
Console.WriteLine($"カテゴリ: {item.Category}, 合計金額: {item.TotalPrice}"); // 合計金額を出力
}
}
}
カテゴリ: カテゴリ1, 合計金額: 2500
カテゴリ: カテゴリ2, 合計金額: 2000
Selectメソッドとの組み合わせによる合計
Selectメソッド
を使用することで、特定のプロパティを選択し、その合計を計算することができます。
以下の例では、商品の価格を2倍にしてから合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000 },
new Product { Name = "商品B", Price = 1500 },
new Product { Name = "商品C", Price = 2000 }
}; // 商品のリストを作成
decimal totalPrice = products
.Select(p => p.Price * 2) // 価格を2倍にする
.Sum(); // 合計を計算
Console.WriteLine($"合計金額: {totalPrice}"); // 合計金額を出力
}
}
合計金額: 9000
複数のコレクションを結合して合計を計算する方法(Joinとの併用)
複数のコレクションを結合し、その結果に対して合計を計算することも可能です。
以下の例では、商品とそのカテゴリを結合し、各商品の価格の合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; } // 商品名
public decimal Price { get; set; } // 価格
public int CategoryId { get; set; } // カテゴリID
}
class Category
{
public int Id { get; set; } // カテゴリID
public string Name { get; set; } // カテゴリ名
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "商品A", Price = 1000, CategoryId = 1 },
new Product { Name = "商品B", Price = 1500, CategoryId = 1 },
new Product { Name = "商品C", Price = 2000, CategoryId = 2 }
}; // 商品のリストを作成
List<Category> categories = new List<Category>
{
new Category { Id = 1, Name = "カテゴリ1" },
new Category { Id = 2, Name = "カテゴリ2" }
}; // カテゴリのリストを作成
var totalPrice = products
.Join(categories,
p => p.CategoryId,
c => c.Id,
(p, c) => new { ProductName = p.Name, p.Price, CategoryName = c.Name }) // 商品とカテゴリを結合
.Sum(x => x.Price); // 合計を計算
Console.WriteLine($"合計金額: {totalPrice}"); // 合計金額を出力
}
}
合計金額: 4500
このように、Sumメソッド
はさまざまな方法で応用でき、複雑なデータ処理を簡単に行うことができます。
Sumメソッドと他の集計メソッドの比較
SumとCountの違い
Sumメソッド
とCountメソッド
は、どちらもコレクションに対する集計を行いますが、目的が異なります。
Sumメソッド
は、数値型の要素の合計を計算するために使用されます。
一方、Countメソッド
は、コレクション内の要素の数をカウントします。
以下の例でその違いを示します。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 整数のリストを作成
int totalSum = numbers.Sum(); // Sumメソッドを使用
int totalCount = numbers.Count(); // Countメソッドを使用
Console.WriteLine($"合計: {totalSum}, 要素数: {totalCount}"); // 合計と要素数を出力
}
}
合計: 15, 要素数: 5
SumとAverageの違い
Sumメソッド
とAverageメソッド
も異なる目的を持っています。
Sumメソッド
は要素の合計を計算しますが、Averageメソッド
は要素の平均値を計算します。
以下の例では、Sumメソッド
とAverageメソッド
の使い方を示します。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 整数のリストを作成
int totalSum = numbers.Sum(); // Sumメソッドを使用
double average = numbers.Average(); // Averageメソッドを使用
Console.WriteLine($"合計: {totalSum}, 平均: {average}"); // 合計と平均を出力
}
}
合計: 15, 平均: 3
SumとAggregateの違い
Sumメソッド
とAggregateメソッド
は、どちらも集計を行いますが、Aggregateメソッド
はより一般的で柔軟な機能を提供します。
Sumメソッド
は数値型の合計を計算するために特化していますが、Aggregateメソッド
は任意の集計操作を実行できます。
以下の例では、Aggregateメソッド
を使用して合計を計算しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 整数のリストを作成
int totalSumUsingAggregate = numbers.Aggregate(0, (acc, n) => acc + n); // Aggregateメソッドを使用
Console.WriteLine($"合計: {totalSumUsingAggregate}"); // 合計を出力
}
}
合計: 15
このように、Sumメソッド
は特定の用途に特化した集計メソッドであり、Count、Average、Aggregateなどの他の集計メソッドと組み合わせて使用することで、さまざまなデータ処理を行うことができます。
まとめ
この記事では、C#のLINQにおけるSumメソッド
の基本的な使い方から、オブジェクトコレクションに対する応用例、他の集計メソッドとの比較まで幅広く解説しました。
Sumメソッド
は、数値型の要素の合計を簡単に計算できる強力な機能であり、条件付きの合計やグループ化されたデータの合計など、さまざまなシナリオで活用できます。
これを機に、Sumメソッド
を使ってデータ処理を効率化し、より複雑な集計処理に挑戦してみてはいかがでしょうか。