2012-04-05 15 views
0

あり、次のキーの値でロードされる辞書オブジェクト: 189A 189B 189C 201aは、ほとんどの状況では 201B辞書オブジェクトのキー値の一部だけを見つける方法はありますか?

、ユニークな人生は良好であり、すべての個々のキーの値が必要とされています/ 。しかし、特定の状況では、それらの背後にある文字(189a、189b、189c)を持つキーはすべて同じことを意味します(つまり... 189)。したがって、キーの最初の部分だけにキー値が存在するかどうか(containskeyメソッドのように)、trueを返すかどうかを調べる方法が必要です。
これを達成するためのアイデアはありますか?

+0

ルックアップは、おそらく最初の場所でハッシュテーブルの目的全体を敗北させる 'O(n)'でしょう。 –

+0

また、vb.netが比較的オブジェクト指向の場合は、キーに使用する独自のクラスを作成し、hashメソッドとequalsメソッドを適切に定義して、189a、189b、および189cがすべて「等しい」ようにすることができます。 –

+0

@MikeChristensenルックアップの頻度や性質によっては、それほど大きな問題ではないかもしれません。特定の形式のキーの存在チェックがコレクションの通常の使用であるということは、疑問からは明らかではありません。そうでない場合は、非ハッシュセットを使用するよりも完全に正当なものになります。 – PinnyM

答えて

1

これは何か?

dictionary.Keys.Any(Function(key) key.StartsWith("189")) 

またはあなたがより多くのfind詳細に制御するために正規表現を使用することができます。

dictionary.Keys.Any(Function(key) Regex.IsMatch(key, "^189[^\d]?") 
+0

この質問にはVB.Netというタグがついています。 –

+0

右に更新されました。 – PinnyM

+0

実際にはうまくいきます。予測できる唯一の問題は、辞書にも「1891」の値が含まれていて、それが偽陽性を引き起こした場合です。最後に手紙を除外しようとする方が良いでしょうか。それは数字の最後に1文字の可能性しか持たないからです。 – user1070202

1

あなただけ時々は接尾文字を無視する必要があるので、最大効率のために、私は追加を使用することをお勧めしますHashSet(T)に数値部分を格納します。辞書に要素を追加/削除する場合は、HashSet(T)の数値も追加/削除します。 HashSet(T).ContainsメソッドがO(1)であるため、要素が存在するかどうかを確認するのが速くなります。

関連する問題