如何简化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))

或类似的数组是字符串列表来检查?

如何简化if语句的字符串检查

如果你想比较一个字符串和其他几个字符串,你可以使用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)时间内执行检查(ContainsAny需要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>,正如其他用户指出的那样。