我有一整套存儲在.net 2.0哈希表中的值。我真正想找到的是一種基本上在表上執行SQL select語句的方法。我正在尋找一種方法來使用通配符搜索.net哈希表中的值
含義,我想拿到鑰匙其關聯值匹配一個非常簡單的文本模式的列表(沿着線「打頭數字」。)
的最終目標是消除這些來自哈希表的記錄用於進一步處理。
我一直在打擊我的頭一陣子,現在我似乎無法拿出任何東西。
任何想法?
(在關閉的機會重要性:由於本項目的實際情況,任何第三方小工具或升級到最新版本的.NET的是假表。)
我有一整套存儲在.net 2.0哈希表中的值。我真正想找到的是一種基本上在表上執行SQL select語句的方法。我正在尋找一種方法來使用通配符搜索.net哈希表中的值
含義,我想拿到鑰匙其關聯值匹配一個非常簡單的文本模式的列表(沿着線「打頭數字」。)
的最終目標是消除這些來自哈希表的記錄用於進一步處理。
我一直在打擊我的頭一陣子,現在我似乎無法拿出任何東西。
任何想法?
(在關閉的機會重要性:由於本項目的實際情況,任何第三方小工具或升級到最新版本的.NET的是假表。)
你可以使用對正則表達式hashtable中的每個鍵。這是非常髒,但它的工作原理:
static void Main(string[] args)
{
Hashtable myhashtable = new Hashtable();
myhashtable.Add("Teststring", "Hello");
myhashtable.Add("1TestString1", "World");
myhashtable.Add("2TestString2", "Test");
List<String> newht = new List<String>;
//match all strings with a number at the front
Regex rx = new Regex("^[1-9]");
foreach (string key in myhashtable.Keys)
{
if (rx.IsMatch(key) == true)
{
newht.Add(key);
}
}
//Loop through all the keys in the new collection and remove them from
//them from the main hashtable.
foreach (string key in newht)
{
myhashtable.Remove(key);
}
}
編輯:而只是爲了好玩,這裏是LINQ版本(對不起,我只是有太多)。
Hashtable myhashtable = new Hashtable();
myhashtable.Add("Teststring", "Hello");
myhashtable.Add("1TestString1", "World");
myhashtable.Add("2TestString2", "Test");
Regex rx = new Regex("^[1-9]");
var k = (from string key in myhashtable.Keys
where rx.IsMatch(key)
select key).ToList();
k.ForEach(s => myhashtable.Remove(s));
編輯:我剛纔添加的刺痛列表而不是一個哈希表,我不記得哪個.NET版本有泛型列表在它***拍打額頭
如果你是真正的尋找以數字開頭的事情,那麼你可以比使用正則表達式快得多。只要看看每個鍵的第一個字符,並確定它是否是一個數字。將您想要移除的密鑰存儲在列表中,因爲您只需保留密鑰。
List<string> keysToRemove = new List<string>(myhashtable.Count);
foreach (string key in myhashtable.Keys)
{
if (char.IsDigit(key[0])
{
keysToRemove.Add(key);
}
}
foreach (string key in keysToRemove)
{
myhashtable.Remove(key);
}
使用LINQ:
Dim myhashtable As New Hashtable
myhashtable.Add("Teststring", "Hello")
myhashtable.Add("1TestString1", "World")
myhashtable.Add("2TestString2", "Test")
For Each i As String In From Element In myhashtable.Cast(Of DictionaryEntry)() Let k = DirectCast(Element.Value, String) Where k.StartsWith("W") Select DirectCast(Element.Key, String)
MsgBox("This key has a matching value:" & i)
Next
但是,使用字典的更好,如果使用LINQ:
Dim d = New Dictionary(Of String, String)()
d.Add("Teststring", "Hello")
d.Add("1TestString1", "World")
d.Add("2TestString2", "Test")
For Each i As String In From element In d Where element.Value.StartsWith("W") Select element.Key
MsgBox("This key has a matching value:" & i)
Next
,取而代之的.StartsWith( 「W」),你當然可以做任何其他過濾你想要的。
這就是我對他的情況所建議的。 – 2008-12-02 01:20:44
當我第一次看到問題的時候,我就像是「是!LINQ時間」,然後我看到了.net 2.0,然後是:'(,再次使用foreach循環再次使用lol – 2008-12-02 01:23:08
這是我們追求升級這個系統的展覽之一到.net 3.5。;) – 2008-12-02 01:27:33