我有一个接受字符串的方法,我想返回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))
或类似的东西,其中array是要检查的字符串列表?
答案 0 :(得分:3)
如果您想将字符串与其他字符串进行比较,可以使用Collection
来简化代码,例如Array
。然后你可以检查你要查找的字符串是否存在于数组中:
return new [] { one, two, three }.Contains(s);
另一种选择是使用Any
方法:
return new [] { one, two, three }.Any(x => x == s);
当然,有很多方法可以做到这一点。但重点是选择正确的数据结构来简化代码并使其尽可能简单易读。
答案 1 :(得分:2)
如果你比速度和清晰度更关心内存,你也可以使用哈希集:
var hashSet = new HashSet<string> { "abc", "def", "ghi" };
hashSet.Contains("abc");
答案 2 :(得分:0)
正如您所建议的那样,最好是创建一个集合,然后检查其中是否存在值。
public bool MethodOne(string s)
{
List<string> collection = new List<string>() {"abc", "def", "ghi"};
return collection.Contains(s);
}
答案 3 :(得分:0)
如果您在编译时知道值或检查是主导操作(而不是modyfing集合),请考虑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)在检查大集合时很重要。 Here是包含比较的示例表。
答案 4 :(得分:0)
将它放在字符串数组中并使用
会更好吗?if(array.contains(s))
或类似的东西,其中array是要检查的字符串列表 反对?
是的,最好将检查字符串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>
,正如其他用户所指出的那样。 / p>