C# 是否可以确定字符串是否位于一行中字符串数组的任何位置?
我有一个循环代码来确定字符串数组中是否存在字符串:C# 是否可以确定字符串是否位于一行中字符串数组的任何位置?,c#,string,loops,C#,String,Loops,我有一个循环代码来确定字符串数组中是否存在字符串: private bool OneOfTheAustralianWords(string _whirred) { string[] australian100 = File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8); foreach (string whirred in australian100) { if (whirred.Trim().ToUp
private bool OneOfTheAustralianWords(string _whirred)
{
string[] australian100 = File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8);
foreach (string whirred in australian100)
{
if (whirred.Trim().ToUpper() == _whirred.Trim().ToUpper()) return true;
}
return false;
}
有更简单/更有效的方法吗?试试:
return File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8)
.Any(l => l.Trim().ToUpper() == _whirred.Trim().ToUpper());
此外,我还建议为\u whirred.Trim().ToUpper()
引入变量,并使用它返回可枚举(如所建议的)和StringComparison.CurrentCultureIgnoreCase
不将文件中的字符串大写:
var searched = _whirred.Trim();
return File.ReadLines(@"C:\PlatypiRUs.txt", Encoding.UTF8)
.Any(l => l.Trim().Equals(searched, StringComparison.CurrentCultureIgnoreCase));
File.ReadLines
不是比File.ReadAllLines
更高效吗?更简单吗?对更有效率?不是真的。您至少可以在开始之前修剪\u whirred
,而不是对每一行重复。还可以尝试使用不区分大小写的字符串比较,而不是ToUpper
。这不仅更加正确(在某些语言中,ToUpper
技巧不起作用),而且还可以避免创建额外的临时字符串。对于第二个版本:您不需要将whirred
转换为大写。@Vilx-同意。忘记删除。效率是一件棘手的事情。如果文件很小,一次读取内存中的所有文件是最有效的。如果它很大,您将希望将其分块处理,否则您将耗尽RAM并开始交换。最有效的方法可能是内存映射文件,但在C#中,这是很难做到的,尤其是在这个任务中。代码会变得非常复杂,所以如果你在每一个可能的性能之后都是值得考虑的(在这种情况下,你可能会考虑C++)。