确保List <customobject> </customobject>中的唯一标识符

时间:2012-05-25 12:31:05

标签: c# uniqueidentifier

我正在创建一个Excel加载项,允许用户通过指定域名以及他们希望用来生成PURL的列来生成PURLs

因此,例如,用户可以指定 stackoverflow.com 的域以及名字姓氏列。得到的PURL将是:

http://stackoverflow.com/JamesHill

这个加载项唯一真正的挑战是确保PURL的唯一性。让我们说詹姆斯希尔有两个。在这种情况下,应生成以下PURL:

http://stackoverflow.com/JamesHill
http://stackoverflow.com/JamesHill1

问题

确保PURL的唯一性的最佳方法是什么,假设我有一个List<CustomObject>,每个都包含一个PURL属性(字符串)。我想我正在寻找一个与C OVERPARTITION BY相当的C#。

任何建议都将不胜感激。

其他信息

在Excel中生成PURL后,数据将返回给我们的客户进行数据处理。在某些时候,数据将被导入到处理我们的PURL服务器请求的DB中。加载项的目的是允许非程序员快速生成PURL并将其返回给客户而无需程序员参与。

1 个答案:

答案 0 :(得分:1)

两种最常见的解决方案是

1)如果您只想测试密钥的唯一性,请使用HashSet<K>

var purlsSet = new HashSet<string>();
purlsSet.Add("http://stackoverflow.com/JamesHill");
...
if (purlsSet.Contains("http://stackoverflow.com/JamesHill") {
    ...
} 

2)如果您想存储密钥和值,请使用Dictionary<K,V>

var purlsDict = new Dictionary<string, CustomObject>();
CustomObject customObject = ...;
purlsDict.Add("http://stackoverflow.com/JamesHill", customObject);
...

if (purlsDict.ContainsKey("http://stackoverflow.com/JamesHill") {
    ...
}

// OR

if (purlsDict.TryGetValue("http://stackoverflow.com/JamesHill", out customObject) {
    ...
} 

您还可以使用OrderedDictionary,它结合了列表和字典的功能,或SortedDictionary<K,V>,如果您希望始终对条目进行排序。