У меня есть функция, которая принимает число, которое преобразует его в 5x7 графическое представление цифр, как это:печати консольных символов быстрее
Console.WriteLine(" ███ "); // byte: 0000 1110
Console.WriteLine("█ █"); // 0001 0001
Console.WriteLine("█ █"); // 0001 0001
Console.WriteLine("█ █"); // 0001 0001
Console.WriteLine("█ █"); // 0001 0001
Console.WriteLine("█ █"); // 0001 0001
Console.WriteLine(" ███ "); // 0000 1110
мне сказали, это можно сделать быстрее, используя массивы байт. Это в основном то, что я сделал:
byte[] data = new byte[] { 14, 17, 17, 17, 17, 17, 14 };
BitArray bitData = new BitArray(data);
int bitCounter = 0;
foreach (bool bit in bitData)
{
if (bit)
Console.Write("█");
else
Console.Write(" ");
bitCounter++;
if (bitCounter>7)
{
bitCounter=0;
Console.WriteLine();
}
}
Это медленнее, чем запускается, так что я не могу использовать его. Может ли кто-нибудь показать мне лучший способ?
Обновление: StringBuilder действительно помогает, но это будет немного медленнее, чем исходный код, который у меня был. Его по-прежнему в основном использование команды записи 7 раз в консоли замедляет меня. Я попытался использовать только 1 команду записи с помощью \ n, но мне нужно отложить следующую строку без стирания внутри отступов.
Ну, конечно, это медленнее, у вас есть гораздо больше вызовов 'Write' здесь. Что вы можете сделать, так это создать одну строку с новыми строками и попробовать сразу же на консоль. Я не знаю, что подразумевалось, говоря, что вы можете делать это быстрее, используя массивы, но, вероятно, не то, что вы понимаете. – Pako
Вы можете использовать 'StringBuilder' для создания всей строки (или всего вывода) и вывести ее на экран в своем цельность. – Davio
Или вы можете попробовать что-то вроде примера 2 по этой ссылке: http://www.dotnetperls.com/convert-string-byte-array, похоже, использует массивы, но все возвращается к выведению одной строки на консоль вместо много – Pako