String.Substring如何比String.Split更有效?

Eri*_*way 5 .net c#

Joe Duffy的博客暗示使用string.Substring效率比string.Split.

我不知道它是否说该Substring方法没有分配新的字符串,或者它是否更有效,因为它没有进行任何不需要的分配.你能解释它如何更有效率并展示一个例子.

我理解他的第一个例子是创建一个数组然后处理数组中的每个字符串.

string str = ...;
string[] substrs = str.Split(',');
foreach (string subtr in substrs) {
Process(substr);
}
Run Code Online (Sandbox Code Playgroud)

如何提高效率

string str = ...;
int lastIndex = 0;
int commaIndex;
while ((commaIndex = str.IndexOf(',', commaIndex)) != -1) {
    Process(substr, lastIndex, commaIndex);
    lastIndex = commaIndex + 1;
Run Code Online (Sandbox Code Playgroud)

我看到的是使用 String.IndexOf查找逗号的索引然后处理字符串.我假设他打算String.Substring在处理过程中使用它来提取数据.下面的评论之一表明他可能会逐字逐句地提出它.他是否会拉动角色,直到他击中下一个可能构建一系列char的逗号?

Ren*_*Pet 7

好悲伤.

老笑话:经理想知道程序员A或程序员B是否是更好的程序员,所以他上演了一场比赛.他们都写了一个程序来解决一个复杂的问题,编写最好的程序的人会赢.

两位程序员提交了他们的答案.程序员A的程序跑得最快,当程序员B指出程序员A程序提供的答案有点偏离时,经理即将宣布他是胜利者.

"但我的计划仍然是最快的,我应该获胜",程序员A.

"如果答案不一定正确,我可以写一个比你快10倍的程序",反驳程序员B.

Joe Duffy的第二个例子,他避免使用string.Split(),这是错误的.它不会编译.变量"substr"未定义.

我休息一下.

  • @Blorgbeard:尽管如此,他不小心打破了代码,有点开车回家了.你越复杂,就越有可能让这样的东西进入.特别是如果你增加了复杂性.对他的情况没有帮助,这也只是一个错字; 这证明他在开始对子串进行咆哮之前没有费心去测试或分析代码.实际上在VS中键入它并编译它会显示错误. (4认同)
  • 很好的笑话,但我不确定你的意思是什么。Joe Duffy 的错误是一个简单的错字——他的意思是说“str”而不是“substr”。 (2认同)