0

ハッシュテーブル全体をループせずに、指定された値を持つキーと値のペアを削除する方法はありますか?

そうでない場合-これを行うことができる、使用できるより良いタイプはありますか?

ここで、私が何をしているのかについて少し背景を説明します。私は複雑にしすぎていると確信しており、より良いアプローチがあります...

キーが「ソース」スプレッドシートの列名で、値が「宛先」システムのフィールド名であるキー/値のリストがあります。

「ソース」の列をループしてハッシュテーブルのキーを照合すると、ペアを削除できます。

終了すると、ハッシュテーブルに一致するキーがない「ソース」の列が存在する可能性があります。ユーザーは、残りの値のいずれかを選択することで、これをオーバーライドできます。

ここで、そのキー/値をハッシュテーブルから削除する必要があります。

4

3 に答える 3

5

いいえ、ありません。

これを実行したい場合、通常は2つのことのいずれかを意味します

  1. キーと値が逆になっています。あなたの価値観をあなたの鍵にし、あなたの鍵をあなたの価値観にしてください。

  2. 2つの辞書が必要です。1Dictionary<T1, T2>つと1つDictionary<T2,T1>。各ペアが両方の辞書にあり、一貫しているようにデータを入力する必要があります。また、キーだけでなく、各値が非常に一意であることも意味します。現在の値が一意でない場合はDictionary<T2, List<T1>>、各値が複数のキーにマップされる可能性があるため、または同様のものが必要になります。そうすることはまたあなたの構造を維持することを難しくします...より難しくなります。TwoWayDictionary(必要な場合は、新しいタイプを作成することを検討してください。)

于 2012-10-31T20:51:02.113 に答える
5

ハッシュテーブル全体をループせずに、指定された値を持つキーと値のペアを削除する方法はありますか?

いいえ。ハッシュテーブルのポイントは、値ではなくキーですばやく検索できることです。

実際に.NET 1.1 を使用しDictionary<TKey, TValue>ている場合を除き、通常はとにかく使用する必要があることに注意してください。

そうでない場合-これを行うことができる、使用できるより良いタイプはありますか?

一意のキーだけでなく一意の値を使用する場合は、辞書を 2 つ (それぞれ 1 つずつ) 持つだけで済みます。次に、関連する値に対応するキーを検索し、キーごとに両方の辞書から削除できます。

于 2012-10-31T20:49:33.143 に答える
-1

HashTable クラスは IEnumerable を実装しているため、繰り返しの代わりにクエリ (LINQ) を使用できます。

于 2012-10-31T20:50:01.277 に答える