我正在创建一个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 OVER
和PARTITION BY
相当的C#。
任何建议都将不胜感激。
其他信息
在Excel中生成PURL后,数据将返回给我们的客户进行数据处理。在某些时候,数据将被导入到处理我们的PURL服务器请求的DB中。加载项的目的是允许非程序员快速生成PURL并将其返回给客户而无需程序员参与。
答案 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>
,如果您希望始终对条目进行排序。