.NET ヘルプ

C# Dictionary TryGetValue(開発者のための動作方法)

更新済み 8月 29, 2023
共有:

C#は、多くの機能を提供する汎用性が高く強力な言語です。 その中にはC# Dictionary(C#辞書)があります。

C#の辞書の基本を理解する

TryGetValue メソッドに入る前に、C# の Dictionary とは何かを理解することが重要です。 簡単に言うと、ディクショナリーはキーと値のペアを集めたものです。 たとえば、キーが学生の名前である辞書を持っている場合 (文字列の値)それぞれの年齢に対応する値 (整数値).


    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };

    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
VB   C#

辞書のキーは一意です。 辞書では、対応する値を取得するためのキーにアクセスすることができるため、検索機能に非常に効率的です。

従来のアプローチ: ContainsKey メソッド

C#の辞書を使用するとき、一般的な作業は特定のキーに関連付けられた値を取得することです。 ただし、存在しないキーに直接アクセスすると、プログラムの流れを中断させるKeyNotFoundExceptionがスローされる可能性があります。 これを避けるために、指定されたキーが辞書内に存在するかどうかを確認することが一般的です。 ここで ContainsKey メソッドが役立ちます。

ContainsKeyメソッドは、Dictionaryに特定のキーが存在するかどうかを確認する、簡単で直感的な関数です。 以下は ContainsKey メソッドの基本的な構文です:

Dictionary<TKey, TValue>.ContainsKey(TKey key)
Dictionary<TKey, TValue>.ContainsKey(TKey key)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.ContainsKey(TKey key)
VB   C#

それはキーをパラメータとして取り、Boolean値を返します。 キーが辞書内にある場合、trueが返されます。 そうでない場合は、false を返します。

学生の名前をキーとして、それに対応する年齢を値として持つ辞書の例を以下に示します。

Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
VB   C#

まず、"Alice"という名前の生徒の年齢を取得したい場合、ContainsKeyメソッドを使用して、"Alice"がDictionary内のキーであるかどうかを確認する必要があります。

string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
If studentAges.ContainsKey(student) Then
	Dim age As Integer = studentAges (student)
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
VB   C#

この場合、プログラムは「Aliceは20歳です」と出力します。Dictionaryに存在しない学生の年齢を取得しようとした場合でも、ContainsKeyメソッドはKeyNotFoundExceptionがスローされるのを防ぎ、その代わりに学生が存在しないことを示すメッセージを出力します。

ただし、ContainsKey メソッドは便利な場合もありますが、必ずしも最も効率的とは限りません。 上記のコードスニペットでは、Dictionaryに対して2つの検索操作が実行されています。1つは ContainsKey メソッドに対するもので、もう1つは値を取得するためのものです。 これは、特に大規模な Dictionariesを扱う場合には時間がかかることがあります。

ContainsKey メソッドは、指定されたキーが辞書に見つからなかった場合の例外処理を行うためのシンプルで直感的な方法ですが、より優れたパフォーマンスで同様の機能を達成できる TryGetValue などの代替メソッドを検討する価値があります。 次のセクションで TryGetValue について詳しく説明します。

TryGetValueで検証と取得を組み合わせる

これは TryGetValue メソッドが便利になるところです。 TryGetValue メソッドは、検証と値の取得を単一のステップで組み合わせ、コードの機能性はほぼ同等でありながら、性能が向上しています。

「TryGetValue」メソッドには、2つのパラメーターが必要です:

  1. あなたが探しているキー。

  2. キーが存在する場合に値を保持するoutパラメーター。

    こちらが構文です:

Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
VB   C#

outキーワードは、このメソッドがvalueパラメータを変更することを示すために使用されます。 指定されたキーが見つからない場合、out 値は値型のデフォルト値になります。 (整数の場合は0、参照型の場合はnull). それ以外の場合、提供されたキーに対応する値を保持します。

TryGetValueの使用方法は次のとおりです:

string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
Dim age As Integer
If studentAges.TryGetValue(student, age) Then
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
VB   C#

このコードは ContainsKey メソッドの例とほぼ同じ機能を提供しますが、キーの検索を一度だけ行うため、より効率的です。

「TryGetValue」実践コード例

TryGetValueメソッドをよりよく理解するために、実際的なコード例を見てみましょう。 各学生に一意のIDと対応する名前が付与されている学校のデータベースを考えてみましょう。 このデータは、キーに学生IDを使用し、値に名前を使用したDictionaryに保存されます。

Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dim studentNames As New Dictionary(Of Integer, String) From {
	{1, "Alice"},
	{2, "Bob"},
	{3, "Charlie"}
}
VB   C#

この場合、IDが2の学生の名前を取得したいとしますが、このIDを持つ学生がデータベースに存在することも確認したいと考えています。

従来では、まず ContainsKey メソッドを使用してキーが含まれているか確認するかもしれません。 (学生ID 2) 存在し、対応する値を取得するために辞書にアクセスします (学生の名前). しかし、TryGetValue メソッドを使用すれば、これを一つのステップで達成できます。

TryGetValueメソッドは2つの引数を取ります:探しているキーと、そのキーに関連付けられている値を保持するoutパラメータです。 キーが見つかった場合、メソッドはtrueを返し、対応する値をoutパラメータに割り当てます。 そうでない場合、falseが返され、outパラメーターにはその型のデフォルト値が設定されます。

int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
Dim i As Integer = 2 ' Student ID
Dim value As String
If studentNames.TryGetValue(i, value) Then
	Console.WriteLine($"The name of the student with ID {i} is {value}.")
Else
	Console.WriteLine($"No student with ID {i} exists in the dictionary.")
End If
VB   C#

この場合、TryGetValueメソッドはstudentNamesディクショナリーでキー2を探します。 キーが見つかった場合、対応する値がvalue変数に割り当てられます。 (学生の名前)、メソッドは true を返します。 その後、プログラムは「ID 2の学生の名前はボブです」と出力します。

TryGetValue メソッドがキー 2 を見つけられない場合、文字列のデフォルト値を割り当てます。 (ヌルである) value 変数に代入され、その方法は false を返します。 その後、コードは else ブロックに進み、「ID 2 の学生は辞書に存在しません」と出力します。

TryGetValue は、キーの存在チェックと値の取得を1つのステップにまとめることで、コードを効率化します。さらに、複数のキー検索操作が不要になるため、特に大きな辞書においてパフォーマンスの向上を提供します。

Iron Suiteの紹介

C#の学習を進めるにつれて、プログラミングの能力を大幅に向上させることができるさまざまなツールやライブラリを利用できるようになります。 これらの中に、C#アプリケーションの機能を拡張するために特別に設計されたツールのスイートであるIronライブラリがあります。 それには、IronPDF、IronXL、IronOCR、およびIronBarcodeが含まれます。 これらのライブラリのそれぞれには独自の機能があり、標準のC#と併用することで大きな利点を提供します。

IronPDF (アイアンPDF)

C# の Dictionary `TryGetValue`(開発者向けの動作方法)図1

IronPDF は、C#ライブラリで設計されています HTMLからPDFファイルを作成、.NETアプリケーションでPDFコンテンツを編集および抽出する。 IronPDFを使用すると、プログラムでPDFレポートを生成し、PDFフォームに入力し、PDFドキュメントを操作することができます。 ライブラリには、HTMLをPDFに変換する機能も備わっており、既存のHTMLコンテンツを簡単にPDFに変換することができます。

IronPDFのハイライトは、その HTMLからPDF すべてのレイアウトやスタイルをそのまま保持する関数。 ウェブコンテンツからPDFを作成することができ、レポート、請求書、および文書化に適しています。 HTMLファイル、URL、およびHTML文字列はシームレスにPDFに変換できます。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

このトピックの文脈では、辞書から学生のデータを取得して、PDFレポートを生成するシナリオを想像してみてください。 TryGetValueは必要なデータを効率的に取得し、その後IronPDFを利用してPDFドキュメントを作成することができます。

IronXL

IronXL は、.NET、Python、および他のプログラミング言語で Excel 形式の読み取り、書き込み、編集を可能にするライブラリです。ユーザーは、Microsoft Excel を使わずに、スプレッドシートをプログラムで管理することができます。主要な機能には、Excel ファイルの作成、既存ファイルの読み込み、セルの書き換え、グリッドデータの操作などが含まれます。データ分析、自動化、レポート生成のために最適なツールです。

IronXL の特長は、使いやすさと柔軟性にあります。どのレベルのプログラマーでも、数行のコードで Excel 操作を実行できます。開発者は、RBGA カラー、フォントスタイル、ボーダースタイルなど、ビジュアル要素のカスタマイズも簡単に行えます。

以下のプラットフォームで使用可能です:

  • IronXL for .NET
  • IronXL for Python

C# Dictionary `TryGetValue`(開発者向けの作動原理)図2

IronXL はC#および.NET用のExcelライブラリです。 これにより、開発者はInteropを使用せずに.NETアプリケーション内でExcelファイルの読み取り、書き込み、作成が可能になります。Excelスプレッドシートからデータをエクスポートまたはインポートする必要があるシナリオに最適です。

TryGetValueについて、キーが製品IDを、値がその数量を表すDictionary(辞書)があると仮定します。 特定の商品の数量を取得するために TryGetValue を使用し、その数量をIronXLを使用してExcel在庫管理スプレッドシートに更新することができます。

IronOCR

アイアンオーシーアール (IronOCR) は、高精度の光学文字認識 (Optical Character Recognition, OCR) ライブラリです。以下はその主な機能と利点です。

  • 高精度: IronOCR は、画像やPDFから文字情報を高精度で抽出します。複雑なフォントや手書き文字にも対応しています。
  • 多言語対応: IronOCR は、多数の言語に対応しており、グローバルなプロジェクトに最適です。
  • 簡単な統合: .NET アプリケーションに簡単に統合できるため、開発者の手間を大幅に削減します。
  • 豊富なフォーマットサポート: PDF、TIFF、JPG、PNG など、さまざまなファイル形式をサポートしています。
  • カスタマイズ可能な OCR 設定: パフォーマンスや精度を最適化するために、様々な設定を調整できます。

サポートされている開発プラットフォームには、.NET Framework、.NET Core、Xamarin などがあります。 アイアンオーシーアール (IronOCR) は、開発者が迅速かつ効率的にOCR機能を統合するための強力なツールです。

さらに詳しい情報やデモ版のダウンロードは、公式ウェブサイト https://ironsoftware.com からご覧いただけます。

C# ディクショナリ `TryGetValue`(開発者向けの動作説明)図3

IronOCR 高度なOCRです (光学文字認識) & .NETおよびC#用のバーコード読み取りライブラリ。 開発者は、.NETアプリケーションで画像やPDFからテキストやバーコードを読み取ることができます。 これは、スキャンされた文書や画像からデータを抽出し、コード内で作業する際に特に役立ちます。

IronOCRを使用してスキャンしたドキュメントから学生IDを抽出するシナリオを考えてみてください。 処理が完了したら、IDと対応する学生の詳細をDictionaryに保存します。 特定の学生の詳細を取得する際に、TryGetValue を使用すると、効率的に辞書からデータを取得することができます。

IronBarcode

C# 辞書 `TryGetValue`(開発者向けの使い方)図4

IronBarcode は、.NET用のバーコード読み取りおよびライティングライブラリです。 IronBarcodeを使用すると、開発者はさまざまなバーコードおよびQRコード形式を生成および読み取ることができます。 これは、コンパクトで機械が読み取り可能な形式でデータをエンコーディングおよびデコーディングするための強力なツールです。

実際のシナリオで、小売システムに製品情報を保存するためにバーコードを使用していると想像してください。 各バーコードは、辞書のキーとして保存された一意の製品IDに対応する可能性があります。 バーコードがスキャンされると、TryGetValue を使用して、辞書から関連する製品の詳細を迅速に取得して表示することができます。

結論

標準的なC#機能のTryGetValueメソッドと連携してIronライブラリの機能を探求してきたように、これらのツールは開発プロセスを大幅に強化することが明らかです。 PDF、Excelファイル、OCR、またはバーコードを扱う場合でも、 Iron Suite (アイアンスイート) お客様のニーズに合わせたソリューションを提供します。

さらに魅力的なのは、これらの各製品が提供することです。 無料体験機能を無料で探索し、試すことができます。ライブラリーの使用を続けることを決定した場合、各製品ごとにライセンス料金は $749 から始まります。 さらに、複数のIronライブラリに興味がある場合は、一つ一つの商品を買うよりも、二つの商品分の価格で全体のIron Suiteを購入できます。

< 以前
C# のデフォルトパラメータ (開発者向けの動作方法)
次へ >
C# ラウンド(開発者向けの仕組み)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >