我有一個方法,它獲取一個字符串和一個Hashtable ...該哈希包含在密鑰中被替換的字符和作爲值代替的值。什麼是檢查散列並替換字符串中字符的最佳方法?從Hashtable中替換字符串中字符的最佳方法?
謝謝:)
我有一個方法,它獲取一個字符串和一個Hashtable ...該哈希包含在密鑰中被替換的字符和作爲值代替的值。什麼是檢查散列並替換字符串中字符的最佳方法?從Hashtable中替換字符串中字符的最佳方法?
謝謝:)
foreach(var pair in hash)
{
mystring = mystring.Replace(pair.Key, pair.Value);
}
如果它確實是一個Hashtable
而不是Dictionary<char, char>
,那麼你可能需要轉換鍵和值到正確的類型。
或者取決於你的字典項目的數量和你的字符串的大小,它可以更快地迭代字符串:
StringBuilder sb = new StringBuilder();
foreach (var char in mystring)
{
char replace;
if (hash.TryGetValue(char, out replace))
{
sb.Append(replace);
}
else
{
sb.Append(char);
}
}
你應該通過串迴路,並使用目前的焦炭得到更換來自散列表的值。這會給你O(n)的速度。
什麼是littel lambda表達式?
var t = new Dictionary<char, char>();
t.Add('T', 'B');
var s = "Test";
s = string.Concat(s.Select(c => { return t.ContainsKey(c) ? t[c] : c ; }));
Console.WriteLine(s);
避免雙重查詢:
var t = new Dictionary<char, char>();
t.Add('T', 'B');
var s = "Test";
s = string.Concat(s.Select(c =>
{
char r;
if(t.TryGetValue(c, out r))
return r;
else
return c;
}));
是的,這是有效的,請記住,使用ContainsKey意味着你正在做兩個字典查找。雖然我相信避免一般的過早優化,但進入良好習慣是一件好事,避免使用TryGetValue是一件簡單的事情。 – 2010-10-27 08:39:46
那麼這就是最高效的方法是什麼? – grady 2010-10-27 07:54:16
這取決於:)第一種方法避免多次查找字典中的字符串,但會爲每個替換字符串執行一次字符串分配。第二個將分配得少得多,但是以字典中每個字符的查找爲代價。 – 2010-10-27 07:55:57
實際上,除非您擔心此時的表現,否則我會使用最簡潔易懂的代碼。 – 2010-10-27 07:56:21