C#でList<string>を扱う際、「2つのリストを重複なくマージしたい」という場面はよくあります。
特に .NET 8 でモダンなコードを書くなら、AddRange や Except を活用する方法がおすすめです。
List<string> 同士を 重複なしで結合(マージ)する方法について、初心者にも分かりやすく解説
例えば、以下のようなコードを考えてみましょう。
List<string> a1 = new List<string> { "a", "b", "c" };
List<string> a2 = new List<string> { "b", "c" };
a1.AddRange(a2);
このコードでは、a1 に a2 のすべての要素が追加されます。その結果、"b" や "c" が 重複してしまいます。
C# では Except を使うことで、あるリストに含まれていない要素だけを抽出できます。
それを使って、次のように記述します。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<string> a1 = new List<string> { "a", "b", "c" };
List<string> a2 = new List<string> { "b", "c" };
// 重複を除いてマージ
a1.AddRange(a2.Except(a1));
foreach (var item in a1)
{
Console.WriteLine(item);
}
}
}
a
b
c
このように、Except(a1) によって a2 の中から a1 にない要素だけが選ばれ、AddRange で追加されます。
文字列の大文字と小文字を区別せずにマージしたい場合は、StringComparer.OrdinalIgnoreCase を使う方法があります。
var merged = a1
.Concat(a2)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
この方法なら、"A" と "a" を同一とみなして重複を防げます。
| 操作 | 説明 |
|---|---|
AddRange | リストに要素を追加(重複を許す) |
Except | 他のリストに存在する要素を除外 |
Distinct | 重複の排除 |
StringComparer.OrdinalIgnoreCase | 大文字小文字の違いを無視した比較 |
C#でList<string>を扱うときは、単純なAddRangeでは重複に注意が必要です。
ExceptやDistinctを組み合わせて、スッキリしたコードを目指しましょう!
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了
RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて
PowerShellでGrapheme Clusterについて処理を考える
業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法
【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法
【C# .NET 8 対応】List<string> を重複なしでマージする方法|
【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き
【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet
WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法
System.Text.Json 9.0.0.0 で FileNotFoundException
C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】
C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法