gpt4 book ai didi

c# - 我将如何制作类似 switch 语句的东西,但适用于多种情况

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:03 25 4
gpt4 key购买 nike

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 个字符串值。但这似乎很老套。

最佳答案

使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com