private bool test(int x, int y, int z)
{
int[] arr = {x,y,z};
switch (arr)
{
case {4,5,6}:
return true;
case {1,2,3}:
return true;
case {7,8,9}:
return true;
default:
return false;
}
}
本质上,我想创建一个执行此操作的函数。但是,不能在switch语句内使用数组值。我将如何完成这样的事情?我并不是很想做一堆if语句,大约会有300种可能的组合。
为了进一步说明,该函数在找到大小写的情况下始终返回true,而在没有找到大小写的情况下始终返回false。 (订单事项)
一种可能的解决方案是将x y z值转换为字符串“ x y z”,然后使用〜300个字符串值。但这似乎很hacky。
最佳答案
使用HashSet
可以促进有效组合。然后搜索是否给定的x,y,z
组合是使用Contains
完成的,并且HashSet本身是O(1)
:
HashSet<(int a, int b, int c)> options = new HashSet<(int a, int b, int c)>
{
(4,5,6),
(1,2,3),
(7,8,9),
// ... the rest of the cases
};
options.Contains((x, y, z));
对于C#7.0之前的版本,请使用:
HashSet<Tuple<int, int, int>> options = new HashSet<Tuple<int, int, int>>
{
Tuple.Create(4,5,6),
Tuple.Create(1,2,3),
};
options.Contains(Tuple.Create(x, y, z));
请注意,对300个案例进行硬编码(或任意数量的案例对硬编码)不是一个好习惯。我建议重新考虑如何存储这些值。您可以将它们存储在数据库或配置文件中并加载它们。然后按照我的建议在
HashSet
中加载存储。至于
switch case
,请注意,如果您在不同情况下的行为相同,则可以:switch (caseSwitch) {
case 1:
case 2:
case 3:
case 4:
return true;
default:
return false;
}
关于c# - 在多种情况下,我如何做出类似于switch语句的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46348712/