字典2键相同值c#

时间:2013-07-18 10:22:10

标签: .net c#-4.0 collections dictionary

我想扫描字符串并用类似的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ȼȻϲСҪҫ₡₵");

2 个答案:

答案 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;
}
相关问题