我想扫描字符串并用类似的unicode字符替换字符。
例如,我想用“cCȼȻςСҪҫ₡₵”中的随机字母替换“C”或“c”
但是你知道字符“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 :(得分:0)
为char
编写不区分大小写的比较器。或者使用单个字符串作为键并使用StringComparer.InvariantCultureIgnoreCase
(或其他一个不区分大小写的比较器,具体取决于您的用例)。
使用HashSet
方法,您需要整个设置匹配,而不仅仅是一个字符。由于哈希表的工作方式,密钥必须完全匹配(哈希代码将整个密钥压缩为int
)。
答案 1 :(得分: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;
}