C# - 如何使用 HashSet<string> 更正字符串大小写

C# - How can I correct string case by using HashSet<string>

给定一个哈希集,例如:

HashSet<string> names = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
    "Alice",
    "Bob",
    "Charles",
}

如何使用此散列集查找不区分大小写的字符串的映射值?例如,如果我有一个字符串 "aLICe",我希望能够找到 "Alice"

我一发布问题就意识到答案是简单地使用不区分大小写的字典...

var names = new Dictionary<string, string>StringComparer.OrdinalIgnoreCase)
{
    {"Alice","Alice"},
    {"Bob","Bob"},
    {"Charles","Charles"},
}

嗯,它不是很漂亮,但你可以使用:

string match = names.FirstOrDefault(n => names.Comparer.Equals(n,"aLice"));

或改用 Dictionary<string, string>,它更擅长 检索 值。 HashSet 擅长存储唯一值,但没有很好的机制可以从中获取 "matching" 值。

如果我没理解错的话,你想获得添加到哈希集中的原始值。因此,由于“Alice”是哈希集中的值,您希望为“alice”或“aLICe”的输入获取该值。

高效地,这对于哈希集是不可能的。您必须遍历哈希集的元素才能找到原始值,使其与列表一样高效。

你可以做的是有一个字典,它允许你进行不区分大小写的查找,但 return 实际值代替:

var names = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
    { "Alice", "Alice" },
    { "Bob", "Bob" },
    { "Charles", "Charles" }
};

Console.WriteLine(names["alice"]); // Alice
Console.WriteLine(names["aLICe"]); // Alice