[英]C# Replace a text in string with if the text contains in String list
我試圖用Dictionary Value替換字符串中的文本,如果它與Dictionary Key相匹配。 從Table1中選擇*,其中column1 = {Value1}和Column2 = {value2}。
mydict.Add({value1},OriginalValue1);
mydict.Add({value2},OriginalValue2);
我可以遍歷字典鍵並替換字符串中的文本,例如,但是如果Dictionary對象中有100多個項目,這將影響性能。
foreach(string key in mydict.keys)
{
if(Query.Contains(key)
{
//Replace the string
}
有沒有辦法做到這一點而對性能的影響最小?
只是速度和字典性能的一個示例。 這是4歲的i7-3820的一個線程
這意味着要遍歷約1200萬個元素大約需要2秒鍾。 字典不是你的問題。 (但我認為部分匹配可能會)
我用這段代碼來運行它。
Dictionary<string, string> dic = new Dictionary<string, string>();
for (int i = 0; i < 11998949; i++) //11998949 is max supported range
{
dic.Add(i.ToString(), i.ToString());
}
Stopwatch sw = new Stopwatch();
sw.Start();
string Query = "some 11998948 input";
foreach(var a in dic.Where(a=> Query.Contains(a.Key)))
{
Console.WriteLine($"Found {a.Key} in string {Query} in time {sw.ElapsedMilliseconds}ms");
}
Console.ReadKey();
首先警告:不要在了解性能實際問題之前就把事情復雜化,以求優化。 對我來說100個替代品聽起來並不重要。 通常,代碼的可讀性和解決實際問題所花費的時間比節省10ns的代碼具有更大的價值。
假設每納秒真的很重要,那么您應該測量基准並考慮改進方案:
String.Replace()
。 它們通常在內部比您自己可以做的更好(除非您知道一些對輸入或所需行為的重要限制) Contains(key)
,因為無論如何您都需要搜索確切的位置進行替換。 或者,如果您選擇處理索引,則可以像使用String.IndexOf(..)
一樣重用第一遍。 StringBuilder.Append()
可能比100x搜索和替換速度快。 再說一遍! 使用.net探查器並測量真正的瓶頸在哪里,並確定哪種方法最適合您的特定方案。
無論您決定使用哪種非平凡的解決方案,請記住,下一個維護代碼的人可能知道您的住所。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.