真相表作为字典的键

Ron*_*erg 3 c# algorithm dictionary

我有六个相互独立的布尔标志,因此有64种可能的组合.这些标志应该确定某些字符串的值.该字符串可以有七个不同的值.我认为将它作为一个大的if语句实现是一个坏主意所以我想创建一个真值表,其中每个组合确定一个特定的结果:

Key            Value
0,0,0,0,0,0 -> "A"
0,0,0,0,0,1 -> "A"
0,0,0,0,1,0 -> "B"
0,0,0,0,1,1 -> "C"
0,0,0,1,0,0 -> "A"
...
Run Code Online (Sandbox Code Playgroud)

这看起来非常像字典,但最好的关键实现是什么(在C#中)?最小的可能键是byte我将选项掩盖到的.但是,这不会提高我的代码的可读性.

还有其他解决方案吗?

luk*_*uke 7

您可以使用FlagsAttribute将6个bool选项表示为枚举,并依赖于枚举名称的可读性.

编辑,例如:

[Flags]
enum MyFlagSet : byte
{
    NoFlags = 0,
    Flag1 = 1 << 0,
    Flag2 = 1 << 1,
    Flag3 = 1 << 2,
    Flag4 = 1 << 3,
    Flag5 = 1 << 4,
    Flag6 = 1 << 5
};

Dictionary MyDictionary = new Dictionary<MyFlagSet, string>()
                          {
                              {MyFlagSet.NoFlags, "Q"},
                              {MyFlagSet.Flag1 | MyFlagSet.Flag2, "A"},
                              {MyFlagSet.Flag3 | MyFlagSet.Flag5 | MyFlagSet.Flag6, "B"}
                          };
Run Code Online (Sandbox Code Playgroud)