如果你真的担心优化这个,那么你可以为你的角色使用一个查找表:
var lookup = Enumerable.Repeat(true, 256).ToArray();
var otherCharacters = HashSet<char>();
然后,您可以使用查找“小”字符,找到时将其翻转true,然后使用otherCharactersunicode 内容...
像这样的东西:
foreach (var c in myListOfChars)
{
try
{
if (!lookup[(int)c]) { // do something }
lookup[(int)c] = true;
}
catch (IndexOutOfRangeException e)
{
if (!otherCharacters.Contains(c)) { // do something }
otherCharacters.Add(c);
}
}
对于查找表范围之外的字符,这会有点慢,这取决于您的语言环境是否可以接受。对于基于拉丁语的字符集,这应该可以正常工作!
现在......并非所有世界都在 ascii / latin-1 范围内工作......浏览阿拉伯语文本将需要不同的范围。
编辑:嗯...我刚刚检查了GetHashCode()for numbers 的输出...嗯...事实证明 an 的哈希码int是 int 本身...所以使用我们的查找表进行优化可能只是愚蠢的.. .我接下来要检查HashSet的实现...