请帮助解决问题。鉴于:
public enum GroupType { None = 0x0000
, Name = 0x0001
, Ext = 0x0002
, Type = 0x0004
};
Dictionary<int, GroupType> d;
d = new Dictionary<int, GroupType> { {1, GroupType.Name}
, {2, GroupType.Name | GroupType.Type}
, {3, GroupType.Type}
};
结果应该是
Dictionary<GroupType, List<int>> dRes;
dRes = { {GroupType.Name, {1, 2}}
, {GroupType.Type, {2, 3}}
};
也就是说,对于每个位掩码值,必须分配原始集中存在的一组键。
Enum.HasFlag对于空掩码,它始终返回 true,包括。您将需要编写一个辅助方法来实现这样的比较:之后,您可以将所有枚举值选择到一个列表中:
并使用列表来获取字典和分组值:
或者,可以
types从字典中采样并为每种类型选择适当的键。ideone 演示:https ://ideone.com/OMCtY9
这就是您可以达到预期结果的方法
本质:我们从字典中读取值。接下来,我们遍历枚举的所有元素
GroupType并检查枚举标志是否存在于当前值中(为此,我们执行操作&,如果标志未设置,则与位运算将返回 0,否则!= 0)。如果枚举存在于现有值中,那么我们将一个元素添加到结果字典中。