那裏得到載有下面的鍵值Dictionary對象: 189A 189B 189C 201A 201B有沒有辦法只找到字典對象中的部分鍵值?
在大多數情況下,生活是美好的,並且需要所有的各個關鍵值/獨特。但在某些情況下,背後有字母的鍵(即...... 189a,189b,189c)意味着同樣的東西(即...... 189)。所以我需要一種方法來查看只有鍵的第一部分是否存在鍵值(如containskey方法),然後返回true。
關於如何完成此任何想法?
那裏得到載有下面的鍵值Dictionary對象: 189A 189B 189C 201A 201B有沒有辦法只找到字典對象中的部分鍵值?
在大多數情況下,生活是美好的,並且需要所有的各個關鍵值/獨特。但在某些情況下,背後有字母的鍵(即...... 189a,189b,189c)意味着同樣的東西(即...... 189)。所以我需要一種方法來查看只有鍵的第一部分是否存在鍵值(如containskey方法),然後返回true。
關於如何完成此任何想法?
這樣的事情?
dictionary.Keys.Any(Function(key) key.StartsWith("189"))
,或者您可以使用正則表達式更發現細粒度的控制:
dictionary.Keys.Any(Function(key) Regex.IsMatch(key, "^189[^\d]?")
注意這個問題被標記爲'VB.Net' – 2012-04-05 15:46:30
正確,已更新。 – PinnyM 2012-04-05 15:47:31
這實際上工作得很好。我可以預見的唯一問題是,如果字典中還包含「1891」的值,那麼它會引發誤報。最後是不是試圖過濾掉這封信?因爲它只會在數字末尾有一個可能的單個字母(或者根本沒有字母)? – user1070202 2012-04-05 16:17:37
既然你只有時需要忽略的後綴字母,爲最大的效率,我會建議使用附加HashSet(T)來存儲數字部分。當您添加/刪除字典中的元素時,還可以從HashSet(T)
中添加/刪除數字。 HashSet(T).Contains
方法是O(1),因此檢查是否存在元素會很快。
查找將是'O(n)',這可能會首先破壞哈希表的整個目的。 – 2012-04-05 15:44:05
另外,如果vb.net是相對面向對象的,那麼你可以創建你自己的類,你可以使用這個鍵來定義它的哈希和相應的方法,這樣189a,189b和189c都是「相等的」。 – 2012-04-05 15:47:17
@MikeChristensen根據查找的頻率和性質,這可能不是什麼大不了的事情。這個問題並不清楚,對指定格式的密鑰的存在檢查是對該集合的常規使用。如果不是,比使用非哈希集合可以是完全合法的。 – PinnyM 2012-04-05 16:41:56