2013-07-18 139 views
1

我想掃描一個字符串並用相似的unicode字符替換字符。字典2鍵相同的值c#

例如,我想從一個隨機的字符來代替「C」或「c」,「cCȼȻςСҪҫ₡₵」

但如u知道字符「C」和「C」是不同的,所以我創建了一個字典包含兩個鍵和相同的值。

我嘗試使用hashset作爲鍵,但我卡在那裏,如何搜索字典中的值,而無需每次都創建「C」和「c」的哈希集。

public static Dictionary<HashSet<char>, string> characters = new Dictionary<HashSet<char>, string>(HashSet<char>.CreateSetComparer()); 
characters.Add(new HashSet<char>{'C', 'c'}, "cCȼȻϲСҪҫ₡₵"); 
+0

或...你可以寫一個正則表達式,爲「C」進行搜索時忽略的情況? – Najzero

+0

哦,是的,謝謝我沒有想到這一點,但如果有一個場景需要我認爲解決方案是(使用2鍵1值)應該怎麼使用? – circler

回答

0

你不需要HashSet,我會用一個簡單的string爲值:

static Form1() // static constructor 
{ 
    characters.Add('c', "cCȼȻϲСҪҫ₡₵"); 
    characters.Add('C', "cCȼȻϲСҪҫ₡₵"); 
} 

private static Dictionary<Char, string> characters = new Dictionary<Char, string>(); 

private static Random rnd = new Random(); 

public static Char Replace(Char c) 
{ 
    string val = null; 
    if (characters.TryGetValue(Char.ToLowerInvariant(c), out val) 
    || characters.TryGetValue(Char.ToUpperInvariant(c), out val)) 
     return val[rnd.Next(0, val.Length)]; 

    return c; 
} 
+0

感謝這個解決方案,它就是我一直在尋找的東西,我沒有想到這種情況下的功能! – circler

0

寫一個不區分大小寫的比較器爲char。或者使用單個字符串作爲密鑰並使用StringComparer.InvariantCultureIgnoreCase(或其他不區分大小寫的比較器之一,具體取決於您的用例)。

使用您的HashSet方法,您需要整個集匹配,而不僅僅是一個字符。由於哈希表的工作方式(哈希代碼將整個密鑰壓縮爲int),密鑰必須完全匹配。

相關問題