如何在C#中合并两个词典

时间:2017-07-03 07:45:45

标签: c# data-structures

考虑以下情况......

  • 用户属于一个或多个群组
  • 群组拥有一项或多项权限
  • 权限被定义为id和布尔值的向量(用于读取,写入等)。向量是大约十二个预定义元素

我需要获取用户权限的汇总列表。在伪代码中,我从用户所属的第一个组获得所有权限;然后对于后续组,我添加了新的权限,但对于现有的权限,我需要OR向量中的所有权限。也就是说,如果一个组有权读取,另一个组有权写入 - 用户将有权阅读

手术不常见;所以表现不是一个大问题。

我正在考虑使用权限向量的字典(C#等效于关联数组。理论上,我可以在正常数组中表示它,但感觉太容易出错)。说,

var permVector = new Dictionary<string, bool> {
    {"read", true}, {"delete", false} ...
}

然后组的权限是另一个词典

var groupPermissions = new Dictionary<int, Dictionary<string, bool>> {
   { 1, permVector }...
}

(这来自数据库;为了清楚起见,我在这里展示了这种方式)

最后,用户权限将是所有组权限的智能合并。这就是我觉得我要走下兔子洞的地方。

是否有更适合此任务的类型?

1 个答案:

答案 0 :(得分:1)

LINQ查询将所有权限合并在一起:

var userPermissions =
    groupPermissions
        .SelectMany(pv => pv.Value) //Select all the Dictionaries
        .GroupBy(pv => pv.Key) //Get each permission into its own group
        .ToDictionary(g => g.Key, //Create the result
            g => g.Any(permission => permission.Value));