Да, и если его ASCII, он будет работать даже быстрее, чем при использовании словаря, без значительного увеличения использования памяти; просто используйте массив ulong[127]
и внесите в него индекс, используя значение символа:
public static ulong[] Count(string stringToCount)
{
var counter = new ulong[127];
foreach (var character in stringToCount)
{
counter[(int)character] += 1;
}
return counter;
}
Если вам нужно обрабатывать только печатаемые символы ASCII (значение 32 и выше), вы можете уменьшить массив и использовать смещение 32 для индексации в нем:
public static ulong[] CountPrintable(string stringToCount)
{
var counter = new ulong[95];
foreach (var character in stringToCount)
{
var charValue = (int)character;
if (charValue > 31)
{
counter[charValue - 32] +=1;
}
}
return counter;
}
И снова смещение, чтобы распечатать их:
counter.Select((x, i) => $"{(char)(i + 32)}\t{counter[i]}");