[英]Compare HashTable Keys in C# case-insensitively
我有兩個文件,數據庫文件和一個我必須比較的新文件。 數據庫文件中不存在但新文件中的值將被進一步處理。
我正在為數據庫和新文件使用 hash 表,其中鍵/值對的格式為 -
("ABC,12","12,ABC")
問題是我無法正確執行哈希表比較。 例如,如果我的數據庫文件的哈希表具有以下值-
("ABC,12","12,ABC")
("XYZ,Sample","Sample,XYZ")
並且新文件具有值
("ABC,12","12,ABC")
("ABC,20","20,ABC")
("XYZ,SAMPLE","SAMPLE,XYZ")
通過使用以下代碼
if (!_database.ContainsKey(KeyValueinNewFile)
我得到以下 output
("ABC,20","20,ABC")
("XYZ,SAMPLE","SAMPLE,XYZ")
它應該只是
("ABC,20","20,ABC")
我也用過
Hashtable ht = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable();
和
Hashtable ht = new Hashtable(StringComparer.InvariantCultureIgnoreCase);
但它不工作。 請向我建議一些我不必在應用程序中進行重大更改的東西。
最簡單的方法是在新舊 collections 上執行完全外連接並找到差異,就像在任何類似 SQL 的語法中一樣(請參閱@sehe 的答案):
例子:
//see, you can pass comparer inside, it also uses hashtables for performance inside.
var fjoin = _database.FullOuterJoin(newFile, x=> x, x=> x, (x,y,key)=> new {oldObj = x, newObj = y}, cmp: StringComparer.InvariantCultureIgnoreCase);
var toFurtherProcess = fjoin.Where(x=> x.oldObj == null);
未編譯,僅由 memory 編譯。 這種方法的好處是您可以完全同步兩個 collections:查找第一個中缺少的內容,密鑰已經存在的內容以及第二個中缺少的內容(意味着需要刪除)。 您獲得了完整的創建、更新、刪除同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.