辞書.Add() / Remove() / Clear()
| 対応: | C# 2.0(2005) |
|---|
キーと値のペアを管理する『Dictionary<TKey, TValue>』に要素を追加する『Add()』、削除する『Remove()』、全消去する『Clear()』メソッドです。
構文
using System.Collections.Generic; // Dictionary を作成します。 Dictionary<TKey, TValue> dict = new Dictionary<TKey, TValue>(); // キーと値のペアを追加します。キーが既に存在する場合は ArgumentException をスローします。 dict.Add(TKey key, TValue value) // キーに対応する要素を削除します。削除できた場合は true を返します。 dict.Remove(TKey key) // すべての要素を削除します。 dict.Clear()
メソッド一覧
| メソッド | 概要 |
|---|---|
| Add(TKey key, TValue value) | 指定したキーと値のペアを追加します。キーが既に存在する場合は ArgumentException がスローされます。 |
| dict[key] = value | インデクサーでキーに値を設定します。キーが存在しない場合は追加、存在する場合は上書きします。 |
| Remove(TKey key) | 指定したキーとそれに対応する値を削除します。キーが存在すれば true、なければ false を返します。 |
| Clear() | Dictionary のすべての要素を削除します。Count が 0 になります。 |
サンプルコード
Program.cs
using System;
using System.Collections.Generic;
// Dictionary<string, int> を作成して要素を追加します。
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("岡部倫太郎", 85);
scores.Add("牧瀬紅莉栖", 92);
scores.Add("椎名まゆり", 78);
Console.WriteLine(scores.Count); // 3
// インデクサーで値を取得・設定します。
Console.WriteLine(scores["岡部倫太郎"]); // 85
// インデクサーで上書きします(Add() と違いキー重複でエラーになりません)。
scores["岡部倫太郎"] = 90;
Console.WriteLine(scores["岡部倫太郎"]); // 90
// 初期値付きで作成する方法です。
Dictionary<string, string> capitals = new Dictionary<string, string>
{
{ "日本", "東京" },
{ "アメリカ", "ワシントンD.C." },
{ "フランス", "パリ" }
};
// Remove() で要素を削除します。
bool removed = capitals.Remove("フランス");
Console.WriteLine(removed); // True
Console.WriteLine(capitals.Count); // 2
// Clear() ですべて削除します。
scores.Clear();
Console.WriteLine(scores.Count); // 0
コンパイルして実行すると次のようになります。
dotnet run 3 85 90 True 2 0
インデクサーと Add() の使い分け
Add() はキーが存在する場合に例外をスローします。キーが既に存在するか不明な場合は、インデクサー dict[key] = value を使うと追加・上書きを例外なく行えます。
IndexerSample.cs
using System;
using System.Collections.Generic;
Dictionary<string, int> hp = new Dictionary<string, int>
{
{ "岡部倫太郎", 100 },
{ "牧瀬紅莉栖", 80 }
};
// インデクサーで上書き(例外なし)
hp["岡部倫太郎"] = 120;
Console.WriteLine(hp["岡部倫太郎"]); // 120
// インデクサーで新規追加
hp["椎名まゆり"] = 90;
Console.WriteLine(hp.Count); // 3
foreach (var kv in hp)
{
Console.WriteLine($"{kv.Key}: {kv.Value}");
}
コンパイルして実行すると次のようになります。
dotnet run 120 3 岡部倫太郎: 120 牧瀬紅莉栖: 80 椎名まゆり: 90
よくあるミス
よくあるミス: 同じキーで Add() を2回呼ぶと例外になる
Dictionary のキーは重複できません。同じキーで Add() を2回呼ぶと ArgumentException がスローされます。重複が起こりうる場合はインデクサーか ContainsKey() で事前確認してください。
using System;
using System.Collections.Generic;
// NG: 同じキーを Add() で2回登録する
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("岡部倫太郎", 85);
// scores.Add("岡部倫太郎", 90); // ArgumentException: キーが既に存在します
修正後は次の通りです。
using System;
using System.Collections.Generic;
// OK: インデクサーで上書きする
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("岡部倫太郎", 85);
scores["岡部倫太郎"] = 90; // 例外なし
Console.WriteLine(scores["岡部倫太郎"]); // 90
修正後は次の通りです。
dotnet run 90
概要
辞書のキーは重複できません。同じキーで『Add()』を2回呼び出すと ArgumentException がスローされます。キーが既に存在するかどうか不明な場合は、インデクサー dict[key] = value を使うか、事前に『ContainsKey()』で確認してください。
インデクサーで存在しないキーを取得しようとすると KeyNotFoundException がスローされます。安全に値を取得するには『TryGetValue()』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。