在执行C#中的替换之前执行检查是否效率更高或更低?

Gon*_*ght 13 c# text replace

这是一个几乎学术上的问题,但我很好奇它的答案.

假设您有一个循环,它在数据集中的每一行上执行例程替换.假设有10,000个这样的行.

有这样的事情会更有效率:

 Row = Row.Replace('X', 'Y');
Run Code Online (Sandbox Code Playgroud)

或者检查行是否甚至包含首先要替换的字符,如下所示:

 if (Row.Contains('X')) Row = Row.Replace('X', 'Y');
Run Code Online (Sandbox Code Playgroud)

效率方面有什么不同吗?我意识到差异可能非常小,我有兴趣知道一种方式是否优于另一种方式,无论它有多好.另外,如果找到要替换的角色的概率是90%,你的回答是否会有所不同?

Mik*_*rds 10

对于您的检查,Row.Contains('X')是一个O(n)函数,这意味着它一次遍历整个字符串一个字符以查看该字符是否存在.

Row.Replace('X', 'Y') 工作方式完全相同,它一次检查每个字符一个字符.

因此,如果您已经进行了检查,则可能会对字符串进行两次迭代.如果你只是替换,你迭代字符串一次.