ディクショナリ値の取得のベストプラクティス
2023-09-17 05:53:13
質問
つい最近、私は
Dictionary.TryGetValue(TKey key, out TValue value)
に気づき、Dictionary から値を取得するためのより良いアプローチがどれなのか興味を持ちました。
私は従来から
if (myDict.Contains(someKey))
someVal = myDict[someKey];
...
知らない限り がある が入っていなければなりません。
するだけで良いのでしょうか。
if (myDict.TryGetValue(somekey, out someVal)
...
どちらがより良い方法なのでしょうか?どちらが速いのでしょうか?Tryバージョンは、try/catchを自分自身の中に「飲み込み」、それをロジックとして使用するので、より遅くなると想像していますが、違いますか?
どのように解決するのですか?
TryGetValueはFindEntryが一度だけ呼び出されるため、若干速くなります。
どの程度速いですか?それは データセットによります。を呼び出すと メソッドを呼び出すと、Dictionary はインデックスを見つけるために内部検索を行います。 はそのインデックスを見つけるために内部検索を行います。もし が真を返した場合、実際の値を取得するために別の を返した場合、実際の値を取得するために別のインデックス検索が必要です。 TryGetValueを使用すると、インデックスを1回だけ検索します。 を使用すると、インデックスを1回だけ検索し、見つかった場合は 変数に値を代入します。
参考:実際にはエラーをキャッチしていません。
呼び出しているのです。
public bool TryGetValue(TKey key, out TValue value)
{
int index = this.FindEntry(key);
if (index >= 0)
{
value = this.entries[index].value;
return true;
}
value = default(TValue);
return false;
}
ContainsKeyはこれ。
public bool ContainsKey(TKey key)
{
return (this.FindEntry(key) >= 0);
}
関連
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み] ディクショナリーで最大値を持つキーを取得する?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。