如何简化if语句的字符串检查
本文关键字:字符串 检查 语句 何简化 if | 更新日期: 2023-09-27 18:11:00
我有一个方法,它接受一个字符串,我想返回true或false,这取决于该字符串之前是否已被记录。
到目前为止,我有如下:
string one = "abc";
string two = "def";
string three = "ghi";
MethodOne(string s)
{
if (s == one || s == two || s == three)
return true;
else
return false;
}
现在有没有一种更简单的方法来简化这个,而不使用大量的||和单字符串检查?
把它放在字符串数组中,然后直接使用
if (array.contains(s))
或类似的数组是字符串列表来检查?
如果你想比较一个字符串和其他几个字符串,你可以使用Collection
来简化你的代码,例如Array
。然后你可以检查你正在寻找的字符串是否存在于数组中:
return new [] { one, two, three }.Contains(s);
另一种选择是使用Any
方法:
return new [] { one, two, three }.Any(x => x == s);
当然有很多方法可以做到这一点。但重点是选择正确的数据结构来简化代码,并使其尽可能简单易读。
如果你更关心速度和清晰度而不是内存,你也可以使用hashset:
var hashSet = new HashSet<string> { "abc", "def", "ghi" };
hashSet.Contains("abc");
正如你所建议的,最好是创建一个集合,然后检查其中是否存在值。
public bool MethodOne(string s)
{
List<string> collection = new List<string>() {"abc", "def", "ghi"};
return collection.Contains(s);
}
如果您在编译时知道值或者检查是主导操作(而不是修改集合),请考虑BinarySearch。它在O(log n)时间内执行检查(Contains
或Any
需要O(n) -线性):
var arr = new[] {"abc", "def", "ghi"}; // could be static or const for example
return Array.BinarySearch(arr, s) >= 0;
请记住,输入数组应该保持排序。
O(log n)在检查大集合时很重要。
把它放在字符串数组中,然后直接使用
如果(array.contains (s))
或类似的数组是要检查的字符串列表反对?
是的,最好将所有需要检查字符串s
的字符串包含到数组或类似的结构中。
在我看来,考虑到其他字符串,这是检查字符串是否相等的最佳选择,因为它大大提高了可读性。这种形式:
var arr = new[] {"abc", "def", "ghi"};
return arr.Contains(s);
比:
更具可读性if (s == one || s == two || s == three)
return true;
else
return false;
那么这个操作对另一个程序员来说就更清楚了。选择这种形式的另一个原因是,这将使程序在将来更容易维护。如果需要将字符串与另一个字符串进行对比,该怎么办?您只需要在您的数组或集合中插入另一个元素,而不是在if
语句中检查另一个字符串:
if (s == one || s == two || s == three || s == four)
很明显,这个语句很难维护,而且读起来很可怕。
关于要使用的集合,我认为数组对于您的任务来说已经足够了,但是还有其他很好的替代方案,例如List<string>
或HashSet<string>
,正如其他用户指出的那样。