gpt4 book ai didi

c# - 一旦循环满足一次要求,就停止检查条件

转载 作者:行者123 更新时间:2023-11-30 15:19:07 25 4
gpt4 key购买 nike

/*编辑:请注意,此代码是一个示例,我的问题通常与 (C#) 编码有关,因为我经常发现自己遇到循环遍历某些内容的情况,而根本不需要检查 if 语句根本。*/

我怀疑这是否可能,但我想确定。

我有一个任务,我必须读取文件并使用变量。这些项目位于一个 txt 文件中,一行以逗号分隔。我得到的文件中的项目被\t 隔开,有时还有空格。一个例子:“\t Boeing 737-800”(注意两个空格)

这是我为摆脱制表符(和空格)而创建的功能:

private string RemoveTab (string text)
{
string tempText = "";
foreach (char c in text)
{
if (c == ' ' && tempText == "")
{
//nothing has to be done
}
else if (c != '\t')
{
tempText += c;
}
}
return tempText;
}

现在进入真正的问题:一旦所有的制表符和空格都被跳过,它就不需要再检查任何东西了。尤其不是第一个 if 语句。有什么方法可以禁用第一个 if 语句吗?

在这个例子中,我怀疑它会对性能产生任何重大影响。好吧,我知道事实并非如此。但由于我的 i5-4570 在玩《守望先锋》和《战地风云 4》等游戏时遇到问题,我希望尽可能提高效率。而且我认为,在不可能满足要求时检查很多东西可能会对 CPU 密集型应用程序中的 CPU 使用率产生一些影响。

最佳答案

不要重新发明轮子。要删除开头和结尾的空格,请使用 string.Trim(' ') (或等效的 string.TrimStartstring.TrimEnd,如果适用)。

剩下的,可以简单地使用 LINQ 完成:

var noTabsString = new string(text.Trim(' ').Where(c => c != '\t').ToArray());

使用字符串连接来构建任意长的字符串通常不是一个好主意,在任何情况下您都应该使用 StringBuilder .

但我会完全避开你的方法;利用 string 的事实工具 IEnumerable<char>并实例化一个 string过滤掉所有不需要的字符后。

更新 回答您的具体问题,无法停用 if如果不再需要,则在循环内进行条件处理。您唯一可以做的就是将循环分成两部分,但我强烈建议您不要这样做,除非您正在检查的条件被证明是 Not Acceptable 瓶颈。

一种方法是采用以下模式:

using (var enumerator = sequence.GetEnumerator())
{
while (enumerator.MoveNext())
{
if (veryExpensiveCheck) { ... }
else if (cheapCheck)
{
...
break; //veryExpensiveCheck not needed anymore.
}
}

while (enumerator.MoveNext())
{
if (cheapCheck) { ... }
}
}

可读性会下降,因此,再次强调,除非确实有必要,并且您有经验数据证明第一种选择是 Not Acceptable ,否则不要这样做。

关于c# - 一旦循环满足一次要求,就停止检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42552704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com