c# – 一种快速反转字符串的方法?
发布时间:2020-12-15 19:37:55 所属栏目:百科 来源:网络整理
导读:参见英文答案 Best way to reverse a string????????????????????????????????????42个 下面是我可以创建的用于反转String的最快代码 public static void ReverseFast(string x){ string text = x; StringBuilder reverse = new StringBuilder(); for (int i
参见英文答案 >
Best way to reverse a string????????????????????????????????????42个
下面是我可以创建的用于反转String的最快代码 public static void ReverseFast(string x) { string text = x; StringBuilder reverse = new StringBuilder(); for (int i = text.Length - 1; i >= 0; i--) { reverse.Append(text[i]); } Console.WriteLine(reverse); } 我想解决这个等式中的每个瓶颈,使其尽可能快.到目前为止我唯一能找到的是阵列边界检查,我只是部分理解.无论如何都要禁用它,因为我理解它如果你使用.Length编译器决定不检查边界但是如果你正在递减,因为我在for循环它仍然进行边界检查?有人可以将此转换为使用指针,这将避免边界检查,我想测试100k字符范围内的字符串的速度差异. 根据下面的评论和帖子,这是我到目前为止所提出的. public static void ReverseFast(string x) { StringBuilder reverse = new StringBuilder(x.Length); for (int i = x.Length - 1; i >= 0; i--) { reverse.Append(x[i]); } Console.WriteLine(reverse); } 上述解决方案比建议的重复问题答案快得多.这个问题实际上解决了5000 * 26字符范围内的逆转问题.我仍然希望使用指针来测试它,以确定是否没有瓶颈,尤其是如此大量的字符. 解决方法
这是一个基于指针的解决方案:
unsafe String Reverse(String s) { char[] sarr = new char[s.Length]; int idx = s.Length; fixed (char* c = s) { char* c1 = c; while (idx != 0) { sarr[--idx] = *c1++; } } return new String(sarr); } 摆脱数组索引(sarr [ – idx])以下可能更快: unsafe String Reverse(String s) { char[] sarr = new char[s.Length]; fixed (char* c = s) fixed (char* d = sarr) { char* c1 = c; char* d1 = d + s.Length; while (d1 > d) { *--d1 = *c1++; } } return new String(sarr); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |