【问题标题】:Dictionary 2 keys same value c#字典2键相同的值c#
【发布时间】:2013-07-17 05:54:07
【问题描述】:

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

【问题讨论】:

  • 或者...您可以编写一个正则表达式,在搜索“c”时忽略大小写?
  • 哦,是的,谢谢,我没有想到这一点,但是如果有一个场景需要我认为解决方案是(使用 2 个键作为 1 个值)我应该使用什么?

标签: .net c#-4.0 collections dictionary


【解决方案1】:

您不需要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;
}

【讨论】:

  • 感谢这个解决方案,正是我要找的,没想到案例功能!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多