考虑下列情形......我如何合并两个字典在C#
- 用户属于一个或多个组
- 集团拥有一个或多个权限
- 权限被定义为ID和布尔值的矢量(用于读取,写入等)。该矢量是大约一打预定义的元素
我需要获得用户权限的聚合列表。在伪代码中,我获得了用户所属第一组的所有权限;然后为后面的组添加新的权限,但对于现有的权限,我需要OR向量中的所有权限。也就是说,如果一个组具有读取权限,另一个组具有写入权限 - 则用户将有权读取和写入。
操作不是很频繁;所以表现不是一个大问题。
我正在考虑为权限向量的字典(C#等效于关联数组。理论上,我可以用普通数组来表示它,但它感觉太容易出错)。再说了,
var permVector = new Dictionary<string, bool> {
{"read", true}, {"delete", false} ...
}
然后一组的权限是另一种解释
var groupPermissions = new Dictionary<int, Dictionary<string, bool>> {
{ 1, permVector }...
}
(这来自于数据库;我在这里展示只是为了清楚起见,这种方式)
最后,用户权限将是所有组权限的智能合并。而这正是我感觉我要去兔子洞的地方。
是否有更适合此任务的任何类型?
如果你创建自己的数据结构,那么你就可以控制添加,合并等自己。但无论如何,你将不得不编写它的代码。 LINQ总是一个不错的选择 –
在这里有关于字典合并的具体问题吗?似乎比这更一般。 第一个建议是使用枚举而不是字符串作为权限。可能与基于相互重叠的事物的升序值或[Flags]枚举相关,因此您可以像提及的那样将它们组合在一起。其次,同意@CallumLinington你应该强烈地考虑编写自己的类来管理它们,然后你可以修改内部实现(并且询问关于它的问题:) – stames
第一个权限可以用一个整数来完成(比如unix )你有系统(读,写,执行),组(读,写,执行),用户(读,写,执行),所以权限可以是9位整数。然后你有一本字典应该包含一个列表,不像字典>,其中键是组名,值是用户名,或者键是用户名,值是组名。 –
jdweng