C#樹林– category –
プログラミング言語のC#を勉強したときのノートです。
-
C#樹林
【C#】LINQのSelectManyで階層構造のリストを平坦化(フラット)にする
オブジェクトが別のコレクションをプロパティとして持っている場合、それらをまとめて一つのリストとして扱いたい場面があります。これを「平坦化(Flatten)」と呼びます。 通常のSelectメソッドでは「リストのリスト(入れ子構造)」になってしまい扱い... -
C#樹林
【C#】LINQのGroupJoinで親データと子データを階層的に結合する
データベースやログ解析などのシステム開発において、「親となるデータ」と、それに紐付く「複数の子データ」を結合し、扱いやすい階層構造にまとめたいケースがあります。 C#のLINQにあるGroupJoinメソッドを使用すると、SQLの「左外部結合(LEFT OUTER J... -
C#樹林
【C#】LINQのJoinメソッドで2つのリストを結合する(内部結合)
リレーショナルデータベース(RDB)において、テーブル同士を共通のIDで紐付ける「JOIN(結合)」は頻繁に行われる操作です。C#のLINQにおいても、Joinメソッドを使用することで、メモリ上の2つのコレクションに対して同様の結合操作を行うことができます... -
C#樹林
【C#】LINQのGroupByメソッドでデータをキーごとにグループ化する
業務アプリケーション開発において、売上データやログデータなどを特定の条件(カテゴリ、日付、ステータスなど)ごとに分類して処理したい場面は頻繁に発生します。 C#のLINQに含まれるGroupByメソッドを使用すると、こうしたグループ化処理を宣言的かつ... -
C#樹林
【C#】LINQのExceptメソッドで2つのリストの差分(差集合)を抽出する
2つのコレクションを比較し、「片方にあって、もう片方にはないデータ」を抽出したい場合、数学でいう「差集合(Relative Complement)」の考え方が必要になります。これは、リストAからリストBに含まれる要素を引き算するイメージです。 C#のLINQには、こ... -
C#樹林
【C#】LINQのIntersectメソッドで2つのリストの共通要素(積集合)を抽出する
2つのデータセットを比較し、「両方に含まれているデータ」だけを取り出したい場合があります。これを数学的な用語で「積集合(Intersection)」と呼びます。 C#のLINQには、この操作を直感的に行えるIntersectメソッドが用意されています。今回は、採用シ... -
C#樹林
【C#】LINQのUnionメソッドで重複を除外してコレクションを結合する
2つのリストや配列を結合する際、単にデータを連結するのではなく「重複を取り除いて一意なリストを作りたい」というケースがあります。このような集合演算(和集合)を行うために、LINQにはUnionメソッドが用意されています。 今回は、複数のメーリングリ... -
C#樹林
【C#】LINQのToLookupメソッドで要素をキー別にグループ化・検索する
データの集合を特定の条件(キー)ごとにグループ化したい場合、LINQのToLookupメソッドを使用すると非常に便利です。 よく似た機能にGroupByがありますが、ToLookupは即時実行され、扱いやすいILookup<TKey, TElement>インターフェースを返すという... -
C#樹林
【C#】LINQのToHashSetを活用したコレクションの重複排除と集合演算
C#において、配列やリストなどのコレクションから重複を取り除いたり、特定の集合演算を行ったりする際、HashSet<T>は非常に強力なクラスです。 特に.NET Framework 4.7.2および.NET Core 2.0以降で利用可能なLINQの拡張メソッドToHashSetを使用する... -
C#樹林
【C#】LINQのToDictionaryメソッド:リストや配列をDictionaryに変換して検索を効率化する方法
リストを「検索しやすい形」に変換する C#でデータを扱う際、データベースやAPIから取得したデータは、多くの場合List<T>や配列として提供されます。これをそのまま「IDを使って特定のデータを検索」しようとすると、リストの先頭から順に探す(線形... -
C#樹林
【C#】LINQのクエリ結果を配列やListに変換する:ToArrayとToListの使い分けと即時実行
LINQの「遅延実行」と「即時実行」 C#のLINQ(Select, Whereなど)を使用する際、非常に重要な概念があります。それは、これらのメソッドが返す値は「データそのもの(結果の集合)」ではなく、「クエリ(命令の手順)」であるということです。 // この時... -
C#樹林
【C#】LINQのContainsメソッド:配列やリストに特定の要素が含まれているか判定する方法
コレクション内の要素の存在確認 C#で配列やリストを扱う際、「このリストの中に特定の値が含まれているか?」を確認したい場面は頻繁にあります。例えば、入力されたIDが許可リストにあるか、あるいは指定された数値が当たり番号に含まれているか、といっ... -
C#樹林
【C#】LINQのAnyメソッド:要素の存在確認と条件判定を効率的に行う方法
「少なくとも1つあるか」を判定する コレクションを扱う処理において、「リストが空でないか確認したい」や「エラー状態のデータが1つでも含まれているか調べたい」といった、**存在確認(Existence Check)**を行う場面は頻繁に発生します。 Count() >... -
C#樹林
【C#】LINQのAllメソッド:すべての要素が条件を満たしているか判定する方法と空リストの挙動
全要素の条件判定 配列やリストなどのコレクションデータを検証する際、「リストに含まれる数値はすべて正の数か?」や「登録されているユーザーは全員有効なステータスか?」といった、すべての要素が特定の条件を満たしているかを確認したい場面は頻繁に... -
C#樹林
【C#】LINQのAverageメソッド:配列やリストの平均値を算出する方法と空リストの注意点
データの平均値を計算する 統計データの解析や、ゲームのスコア計算、システムログのパフォーマンス分析など、データの「平均値」を求める処理はプログラミングにおいて頻出します。 C#のLINQ(Language Integrated Query)が提供するAverageメソッドを使... -
C#樹林
【C#】LINQのMinとMaxメソッド:コレクションの最小値・最大値を求める方法と計算式の活用
コレクション内の最小値・最大値の取得 データの分析や処理において、「リストの中で最も高い数値」や「最も古い日付」を取得する操作は頻繁に行われます。 C#のLINQ(Language Integrated Query)が提供するMinおよびMaxメソッドを使用すると、単純な数値... -
C#樹林
【C#】LINQのSumメソッド:配列やリストの合計値を算出する方法と応用
コレクションの集計処理 業務アプリケーションにおいて、売上の合計、テストの総得点、在庫数のカウントなど、データの「合計値」を求める処理は頻出します。 foreachループを使用して加算処理を実装することも可能ですが、C#のLINQ(Language Integrated ... -
C#樹林
【C#】LINQのCountメソッド:全要素数や条件に一致する要素数を取得する方法
コレクションの要素数を数える C#で配列やリストなどのコレクションを扱う際、そこに「データが何件あるか」を知ることは最も基本的な操作の一つです。 配列には.Lengthプロパティ、List<T>には.Countプロパティがありますが、LINQ(Language Integr... -
C#樹林
【C#】LINQのPrependとAppend:シーケンスの先頭・末尾に要素を追加する方法
コレクションへの要素追加(非破壊的アプローチ) C#で配列やリストに要素を追加する場合、List<T>.Addメソッドを使用するのが一般的です。しかし、この方法は「元のリストを直接変更する」ため、元のデータを保持したまま新しいシーケンスを作りた... -
C#樹林
【C#】LINQのOfTypeメソッド:コレクションから特定の型の要素だけを安全に抽出する方法
異なる型が混在するコレクションの処理 C#は静的型付け言語ですが、object[](オブジェクト配列)や、古いArrayList、あるいは基底クラスのリストなど、異なるデータ型の要素が混在しているコレクションを扱う場面が存在します。 そのようなコレクションか... -
C#樹林
【C#】LINQでデータを並べ替える:OrderByとThenByによる複数条件ソート
データの並べ替え(ソート) 配列やリストなどのデータを扱う際、「数値を小さい順に並べる」「日付の新しい順に表示する」といった並べ替え(ソート)は、最も基本的かつ重要な操作の一つです。 C#のLINQ(Language Integrated Query)を使用すると、SQL... -
C#樹林
【C#】LINQのReverseメソッド:シーケンスの要素を逆順にする方法とList.Reverseとの違い
データの順序を反転させる C#で配列やリストなどのコレクションを扱う際、「データを末尾から先頭に向かって処理したい」や「時系列データを新しい順(降順)に並べ替えたい」といった場面があります。 LINQ(Language Integrated Query)のReverseメソッ... -
C#樹林
【C#】LINQのDistinctとDistinctBy:配列やリストから重複する要素を削除する方法
重複データの排除 データベースから取得したデータや、ユーザー入力値をリスト化する際、同じ値が複数回含まれる「重複」が発生することがあります。集計処理や一覧表示を行う前には、これらを一意(ユニーク)な状態に整理する必要があります。 C#のLINQ... -
C#樹林
【C#】LINQのElementAtとElementAtOrDefault:指定位置(インデックス)の要素を取得する方法
LINQクエリ結果へのインデックスアクセス C#で配列やList<T>を扱う場合、array[0]のようにインデクサ([])を使って特定の位置にある要素にアクセスするのが一般的です。 しかし、LINQのメソッド(OrderByやWhereなど)が返す結果はIEnumerable<T... -
C#樹林
【C#】LINQのLastとLastOrDefault:最後の要素を取得する方法と例外の回避
コレクションの末尾要素へのアクセス 配列やリストなどのコレクションを扱う際、「リストの最後に追加されたデータ(最新のデータ)を取得したい」や、「特定の条件に合致するもののうち、一番最後のものを探したい」という場面は頻繁に発生します。 LINQ... -
C#樹林
【C#】LINQのFirstとFirstOrDefault:最初の要素を取得する方法と例外リスクの回避
コレクションの先頭要素へのアクセス C#で配列やリストなどのコレクションを扱う際、「最初の1件だけを取得したい」あるいは「特定の条件に合致する最初の1件を探したい」という場面は頻繁に発生します。 LINQ(Language Integrated Query)は、この目的の... -
C#樹林
【C#】LINQのSkipとSkipWhile:シーケンスの先頭要素を無視して残りを取得する方法
指定位置まで要素を読み飛ばす コレクション操作において、「先頭の5件はヘッダー情報なので無視したい」や「特定の条件を満たすまでの待機データは不要」といったケースがあります。 C#のLINQには、シーケンスの先頭から特定の要素を無視(スキップ)し、... -
C#樹林
【C#】LINQのTakeとTakeWhile:シーケンスの先頭から要素を抽出する方法と違い
シーケンス先頭からのデータ取得 C#のLINQ(Language Integrated Query)には、コレクションから特定の条件でデータを抽出するメソッドが多数用意されています。その中でも、リストや配列の「先頭から」特定の範囲を取得したい場合に利用されるのが Take ... -
C#樹林
【C#】LINQ Selectメソッドでデータを変換・射影する方法:匿名型やインデックスの活用
データの「変換(射影)」 C#で配列やList<T>などのコレクションを扱う際、「すべての数値を2倍にしたい」「オブジェクトのリストから、特定のプロパティだけを抜き出したい」「計算結果を含む新しい形式のデータを作りたい」といった変換処理は頻繁... -
C#樹林
【C#】LINQのWhereメソッドで条件に一致する要素を抽出する方法:インデックス活用まで
コレクションのフィルタリング処理 C#で配列やList<T>などのコレクションから、特定の条件を満たす要素だけを取り出したい場合、LINQ(Language Integrated Query)のWhereメソッドを使用するのが最も標準的な方法です。 foreachループとif文を組み...