簡體   English   中英

C#中的唯一鍵值集合

[英]unique key value collection in C#

我想構建二維集合,我需要鍵值對的獨特組合。 例如,域“公司”(Id:1)可以具有MachineName“Machine1”和“Machine2”,但不能再次添加另一個MachineName“Machine1”。 另一個域“Corporate”(Id:2)可以有另一個machineName“Machine1”。

在這里我的收藏將像這樣的1-Machine1,1-Machine2,2-Machine1。 添加1-Machine1或2-Machine1應該是無效輸入。 請為此建議數據類型或方法。 我不能使用Dict> datatype,因為如果大小增加它可能會妨礙性能。

對不起,但是根據你的描述,它仍然聽起來像一個字典實現是一個很好的選擇。

如果應用程序的性能因字典的速度而受到影響,那么您可以重新查看問題並推出自己專門定制的解決方案。

你可以這樣做:

Dictionary<String, List<String>> mapping = new Dictionary<string, List<string>>();
mapping.Add("1",new List<string>());
mapping["1"].Add("Machine1");
mapping["1"].Add("Machine2");

這將為您提供域和計算機之間的一對多映射。

或者NameValueCollection類也會這樣做。

因此,您需要使用唯一鍵的某種集合,此集合中的每個項目都是唯一的。

所以,你真的在​​談論一本字典,其中字典中的值是一個獨特的集合。

假設你只是在談論字符串,我會使用類似的東西:

Dictionary<string, HashSet<string>>

如果我錯了,有人會糾正我,但我認為使用這些通用結構的優勢是你可以(直接蝙蝠),這樣做:

Dictionary<string, HashSet<string>> domains = new Dictionary<string, HashSet<string>>();
domains["Domain1"].Add("Machine1");

您是否需要能夠有效地查找具有給定計算機名稱的域列表? 否則, Hashtable<String, HashSet<String>>似乎很合適。

似乎還有一些名為NameValueCollection東西,如果你改變默認值,它可能是一個很好的選擇,這樣它就不會對案例或文化敏感。

您沒有說明這是一項要求,但我的猜測是您還需要能夠查詢特定“域”的所有計算機的數據結構。 防爆。 列出屬於公司1的機器。這是我能想到使用字典的性能可能不可接受的唯一原因(因為您必須遍歷整個列表才能找到所有匹配的條目)。

在這種情況下,您可以考慮將數據表示為樹。

編輯:

根據您上面的評論,您可以將您的密鑰連接為字符串,並使用HashSet檢查您是否已經存儲了該密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM