gpt4 book ai didi

c# - String.Replace 问题的有效解决方案?

转载 作者:太空狗 更新时间:2023-10-30 01:11:51 25 4
gpt4 key购买 nike

假设我有一个这样声明的字符串数组:

String[] strings = new String[ 1024 ];

给定一个这样声明的键值对数组:

KeyValuePair<String, String>[] pairs = new KeyValuePair<String, String>[ 50 ];

执行此操作的解决方案有哪些可能的解决方法:

for ( int i = 0; i < 1024; ++i )
{
foreach ( var kv in pairs )
{
strings[ i ] = strings[ i ].Replace( kv.Key, kv.Value );
}
}

此代码只是任意的,仅用于显示实际问题所在。给定很多在编译时已知的键值,我怎样才能做一个高效的 String.Replace,并可能减少方法调用和复制字符串(每次调用 String.Replace 都会产生一个新的不可变字符串,而不是当有很多替换调用时非常有效)?

最佳答案

它对循环数没有帮助,但如果您使用 StringBuilder 作为中间体,它会使用相同的参数签名集进行 .Replace 调用。

编辑:

不确定它是否更快,但您可以将 Regex.Replace 与计算器委托(delegate)一起使用。

如果您使用键构建搜索正则表达式:(key1|key2|key3|key4...)

然后将委托(delegate)传递给.Replace,就可以根据Match的Value属性返回一个lookup。

  public string ReplaceData(Match m)
{
return pairs[m.Value];
}

...

  pairs.Add("foo","bar");
pairs.Add("homer","simpson");
Regex r = new Regex("(?>foo|homer)");
MatchEvaluator myEval = new MatchEvaluator(class.ReplaceData);
string sOutput = r.Replace(sInput, myEval);

关于c# - String.Replace 问题的有效解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com