C#集合通过匹配项来判断是否为True
本文关键字:判断 是否 True 集合 | 更新日期: 2023-09-27 18:27:57
我在一个项目中遇到了实时业务问题。场景是我必须允许用户根据当前应用程序状态进行更改。我将简要描述流程如下,
应用程序中有4个阶段,即阶段1、阶段2、阶段3和阶段4,并且存在与上述阶段相关联的状态,如A、B、C、D、E、F、G等
根据我必须允许在每个阶段进行更改的状态,下面是允许编辑的各个阶段和状态,
- 第1阶段=>A、B、C
- 第2阶段=>A、C、G
- 第3阶段=>F、E
- 第4阶段=>A、B、C、D、E
我面临的问题是,有没有一种方法可以通过将阶段和状态传递到c#中的集合来获得可编辑的指示符,如果该状态对于已传递的阶段是可编辑的,那么它应该返回true或false
这可以通过C#字典或哈希表实现吗?
你的意思是这样的吗:
private static readonly HashSet<char>[] _allowed =
{
new HashSet<char> { 'A', 'B', 'C' },
new HashSet<char> { 'A', 'C', 'G' },
new HashSet<char> { 'F', 'E' },
new HashSet<char> { 'A', 'B', 'C', 'D', 'E' },
};
bool Allowed(int stage, char status)
{
// Assume stage is 1-based, so subtract 1 for array index
return _allowed[stage - 1].Contains(status);
}
在评估了c#中适当的集合行为后,我决定使用字典来实现这一点
IDictionary<string, HashSet<string>> sets = new Dictionary<string, HashSet<string>>();
sets.Add("Stage 1", new HashSet<string>{ "A","B","C"});
sets.Add("Stage 2", new HashSet<string>{ "D","E"});
public static bool GetAllowed(string stage,string status, IDictionary<string,HashSet<string>> allowedSets)
{
return allowedSets[stage].Contains(status);
}
Console.WriteLine(GetAllowed("Stage 1", "A", sets)); // returns true
Console.WriteLine(GetAllowed("Stage 2", "A", sets)); //returns false