2012-05-25 26 views
0

我正在創建一個Excel加載項,允許用戶通過指定域名和希望用於生成PURL的列來生成PURLs確保列表<CustomObject>中的唯一標識符

因此,例如,用戶可以指定stackoverflow.com域和列名字。由此產生的PURL將是:

http://stackoverflow.com/JamesHill

這個加載項唯一真正的挑戰是確保PURL的唯一性。假設有兩個詹姆斯希爾的。在這種情況下,應該生成以下PURLs:

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

問題

會是什麼,以確保該PURLs的獨特性的最好方式,假設我有一個List<CustomObject>每一個包含PURL屬性(字符串)。我想我正在尋找一個C#相當於SQL的OVERPARTITION BY

任何建議,將不勝感激。

其他信息

一旦PURLs已經在Excel中生成,則數據將被返回到我們的客戶進行數據處理。在某些時候,數據將被導入到處理我們的PURL服務器請求的數據庫中。加載項的目的是允許非程序員快速生成PURL並將其返回給客戶,而無需程序員參與。

+0

你真的應該存儲這些在一個分數... –

+1

集確保唯一性。 – Oliver

+0

@ DanielA.White,他們將被存儲在數據庫中......最終。數據處理常常在建築物外進行。客戶將向我們發送他們的數據,要求我們生成PURL,然後將數據返回給他們。我負責從這個過程中刪除程序員。基本上,一旦PURL生成並返回給客戶,數據將被導入到處理我們的PURL服務器請求的數據庫中。 –

回答

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>

+0

我一直希望得到像SQL的'OVER'和'PARTITION BY'這樣更優雅的東西,但是這讓我開始走上了正確的道路。謝謝。 –

+0

如果您正在尋找一種檢索唯一值的SQL方式,請使用'SELECT DISTINCT purl FROM table'。如果您正在尋找一種檢測重複的方法,請使用'SELECT purl FROM table GROUP BY purl HAVING COUNT(purl)> 1'。 –

+0

不尋找SQL方式,只是一種與SQL一樣優雅的C#方式。謝謝你的幫助。 –