考慮下列情形......我如何合併兩個字典在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