C# で辞書キーが存在するかどうかを確認する

Bilal Shahid 2023年10月12日
  1. C#try-catch を使用して辞書のキーが存在するかどうかを確認する
  2. C#ContainsKey() を使用して辞書キーが存在するかどうかを確認する
  3. C#TryGetValue() を使用して辞書キーが存在するかどうかを確認する
C# で辞書キーが存在するかどうかを確認する

辞書は、キーと値をマップする傾向があります。これには、特定の値がマップされる特定のキーが含まれています。重複するキーは許可されていません。それが辞書の全体的な目標です。

今日は、キーが辞書にすでに存在するかどうかを確認する方法を見ていきます。

C#try-catch を使用して辞書のキーが存在するかどうかを確認する

まず、特定の各学生 ID を CGPA にマップする students という辞書の作成から始めましょう。

Dictionary<int, double> students = new Dictionary<int, double>();
students[101] = 3.22;
students[102] = 3.44;
students[103] = 2.98;

CGPA は double 形式であると想定されているため、ID と CGPA に対してそれぞれ <TKEY, TVALUE><int, double> として定義しました。

students に学生 102 のエントリが存在するかどうかを調べたいとします。確かにそうですが、私たちにまっすぐに伝えるためのコードが必要です。

そのために、次のように try-catch 例外を使用できます。

try {
  Console.WriteLine(students[102].ToString());
} catch (Exception e) {
  Console.WriteLine("No such key present");
}

出力:

3.44

しかし、学生 104 に対して同じことをしようとすると、次のようになります。

出力:

No such key present

なんで?まあ、ToString() メソッドは null ではない値に対してのみ機能します。学生 104 は null であり、students にエントリがないため、例外が発生します。

そして、例外をスローするのではなく、それをキャッチして、コンソールにそのようなキーはありませんというメッセージを表示する傾向があります。

したがって、キーが存在するかどうかを確認するのに効果的な方法です。しかし、それをもっと簡単にすることはできますか?

C#ContainsKey() を使用して辞書キーが存在するかどうかを確認する

次のコードを確認してください。

if (!students.ContainsKey(104)) {
  Console.WriteLine("No such key present");
}

そのようなキーが存在しないため、これはエラーを提示します。

出力:

No such key present

C#TryGetValue() を使用して辞書キーが存在するかどうかを確認する

次のことを行う場合:

double getval = 0.0;
if (!students.TryGetValue(104, out getval)) {
  Console.WriteLine("No such key present");
}

これは、次のように出力を返す傾向があります。

No such key present

TryGetValue() は、キーが存在する場合、その値を取得する傾向があります。値は 2 番目のパラメーターで取得されます。

したがって、out キーワードで送信されます。そして、この値を取得するための変数は、スコープの前に宣言されています。これは getval です。

これらのさまざまなメソッドすべての完全なコードは、以下に含まれています。

using System;
using System.Collections.Generic;
using System.Text;

namespace jinlku_console {
  class coder {
    static void Main(String[] args) {
      Dictionary<int, double> students = new Dictionary<int, double>();
      students[101] = 3.22;
      students[102] = 3.44;
      students[103] = 2.98;

      // TRY CATCH BLOCK
      try {
        Console.WriteLine(students[104].ToString());
      } catch (Exception e) {
        Console.WriteLine("No such key present");
      }

      // CONTAINS KEY METHOD
      if (!students.ContainsKey(104)) {
        Console.WriteLine("No such key present");
      }

      // TRYGETVALUE

      double getval = 0.0;
      if (!students.TryGetValue(104, out getval)) {
        Console.WriteLine("No such key present");
      }
    }
  }
}
著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - Csharp Dictionary