1

我想扫描一个字符串并用类似的 unicode 字符替换字符。

例如,我想用“cCȼȻϲСҪҫ₡₵”中的随机字符替换“C”或“c”

但是你知道字符“C”和“c”是不同的,所以我创建了一个包含两个键和相同值的字典。

我尝试使用哈希集作为键,但我被困在那里,如何从字典中搜索值而不必每次都创建一个“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ȼȻϲСҪҫ₡₵");
4

2 回答 2

0

为 .编写一个不区分大小写的比较器char。或者使用单字符字符串作为键并使用StringComparer.InvariantCultureIgnoreCase(或其他不区分大小写的比较器之一,具体取决于您的用例)。

使用您的HashSet方法,您需要整个集合匹配,而不仅仅是一个字符。由于哈希表的工作方式,密钥必须完全匹配(哈希码将整个密钥压缩为int)。

于 2013-07-18T10:28:44.897 回答
0

你不需要HashSet,我会使用一个简单string的 as 值:

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;
}
于 2013-07-18T10:30:38.200 回答