性能和在C#中从字符串中删除多个字符
在C#中,如果要从字符串中删除多个字符,可以使用不同的方法。然而,对于要删除的字符数量较大的情况下(例如超过10个字符),使用Tim的方法并利用HashSet可能是最快的方法。但是,如果要删除的字符数量较小,则下面的代码可能更快:
public static class StringExt { public static string Remove(this string self, params char[] charsToRemove) { var result = new StringBuilder(); foreach (char c in self) if (Array.IndexOf(charsToRemove, c) == -1) result.Append(c); return result.ToString(); } }
例如,如果要从字符串中删除空格和连字符,可以使用以下代码(如果不需要删除制表符和换行符,则可以删除相应的参数):
string original = "1 2\n3\t4-5"; string result = original.Remove(' ', '-', '\n', '\t');
总结起来,如果要删除的字符数量较大,使用HashSet可能是最快的方法。而如果要删除的字符数量较小,则使用上述的字符串扩展方法可能更快。
【Performance & Remove multiple characters from a string in C#】问题的出现和解决方法
在这段代码中,我们可以看到一个字符串变量input,其中包含了一系列字符,我们希望从中移除空格和减号字符。代码通过遍历input中的每个字符,将不是空格和减号的字符保存到一个临时数组tmp中。最后,通过实例化一个新的字符串,将临时数组中的字符转化为字符串。
然而,有人提出了一个问题,即为什么要重复造轮子,因为.NET框架中已经存在一个StringBuilder类,可以更好地实现字符串的操作。有人还指出,性能优化可能会导致代码的可读性和可维护性下降。但是,有人认为这段代码是在一个独立的方法中,不会对代码的可读性和可维护性产生太大的影响。
另外,还有人提出了另一种解决方案,即使用String.Replace方法来移除空格和减号。这种方法更加简洁,也更加安全,但是也有人认为这种方法会创建一个不必要的临时字符串。
在最后,有人认为这个问题是关于性能的,而且提出的代码也是最高效的解决方案。他们认为使用Replace方法会浪费空间,因为它会创建一个没有空格和减号的临时字符串。
针对这个问题的出现和解决方法,不同的观点存在一定的争议。一方面,使用.NET框架中已有的StringBuilder类可以更好地实现字符串操作,并且提高代码的可读性和可维护性。另一方面,通过手动操作字符数组可以实现更高效的性能,但可能会降低代码的可读性。最终的选择取决于开发者对代码的优化需求和对性能的关注程度。
性能和从字符串中删除多个字符的问题在C#中的出现是因为字符串可能非常大,或者要删除的字符列表非常长。要解决这个问题,可以使用StringBuilder来提高性能。下面是解决方法的示例代码:
StringBuilder sb = new StringBuilder(text.Length); HashSetremoveChars = new HashSet { ' ', '-' }; foreach(Char c in text) { if(!removeChars.Contains(c)) sb.Append(c); } text = sb.ToString();
在大多数情况下,以下代码应该足够解决问题:
foreach (String c in new[] { " ", "-" }) text = text.Replace(c, "");