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
给定一个哈希集,例如:
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