我想知道如果我得到大约 2000 个字符串值的列表,什么是快速且正确的方法:
List<string> strList = new List<string>();
例如:
for (int i = 1; i <= 2000; i++)
{
strList.Add("a" + i);
}
如果找到相等的值,我想替换输入字符串中的每个:
string inputStr = "a1 a5 a80 a80 m124 a34 a300 e12 s00";
如果有两千个值的 strList 中存在任何单词,例如 if (strList.Any(inputStr.Contains))
那么我想要inputStr.Replace
与 ""
空白,那么所需的输出应该是::
"m124 e12 s00";
编辑:
由于我的首要任务是尽可能快地进行替换,因此我尝试比较 ElapsedMilliseconds
下面是 Slai 和 sxmlln 给出的解决方案的结果。两者都完全回答了我的问题,结果排名第二:
2000 个值:
string inputStr = "a1 a5 a80 a80 m124 a34 a300 e12 s00";
结果:
ISet<String> : time: [ 0 ] fast
List<string> : time: [ 5 ] slow
HashSet<string> : time: [ 1 ] average
有时等于相同的字符串和内容:
ISet<String> : time: [ 0 ] fast
List<string> : time: [ 5 ] slow
HashSet<string> : time: [ 0 ] fast
8000 个值:
string inputStr = "a1 a5 a80 a80 m124 a34 a4987 a300 e12 s00";
结果:
ISet<String> : time: [ 2 ] fast
List<string> : time: [ 5 ] slow
HashSet<string> time: [ 3 ] average
20000 个值:
string inputStr = "a1 a5 a80 a80 m124 a34 a4987 a17890 a300 e12 s00";
结果:
ISet<String> : [ 7 ] fast
List<string> : [ 12 ] average
HashSet<string> : [ 16 ] slow
200000 个值:
string inputStr1 = "a1 a5 a80 a80 m124 a34 a4987 a17890 a300 e12 s00 a123676";
结果:
ISet<String> : [ 105 ] fast
List<string> : [ 111 ] average
HashSet<string> : [ 142 ] slow
ISet<String>
总是小于List<string>
且小于或等于HashSet<string>
。和List<string>
变得更快然后 HashSet<string>
在较大数量的值之后,但在此一定数量之前,它比 HashSet<string>
慢与 ElapsedMilliseconds
结果。
最佳答案
我建议使用 Set。它们允许快速查找。
ISet<String> strSet = new HashSet<String>();
for (int i = 1; i <= 2000; i++)
{
strSet.Add("a" + i);
}
接下来,您可以将输入拆分为数组来进行检查(因为您的输入可以用空格拆分)。
string inputStr = "a1 a5 a80 a80 m124 a34 a300 e12 s00";
string[] inputs = inputStr.Split(' ');
最后,现在您循环输入并检查它们是否存在于Set
中。如果没有,请将它们添加到您的结果中。
// this is from System.Text namespace
StringBuilder sbResult = new StringBuilder();
foreach (var input in inputs)
{
if (!strSet.Contains(input))
{
sbResult.AppendFormat("{0} ", input);
}
}
}
string result = sbResult.ToString().Trim();
关于c# - 如何替换字符串中找到的列表中的大量字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41436081/