确保列表<自定义对象>中的唯一标识符

本文关键字:唯一 标识符 对象 列表 自定义 确保 | 更新日期: 2023-09-27 18:35:24

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

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

http://stackoverflow.com/JamesHill .

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

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

问题

确保 PURL

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

任何建议将不胜感激。

附加信息

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

确保列表<自定义对象>中的唯一标识符

两种最常见的解决方案是

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>