Софтуерно Инженерство
Loading...
+ Нов въпрос
Gabbs avatar Gabbs 80 Точки

Adv C# - Подравнено изписване на масив

След като реших няколко от задачите от домашната за многомерните масиви, за удобство и четливо изписване на резултата, сглобих един метод за подравнено изписване на масиви от тип int[,].


http://pastebin.com/bTqzUzQ8

Метода намира с колко цифри се изписва най-голямото число в масива и допълва всички числа с нужния брой whitespaces за да подравни. За малко по-различно подравняване, може да се разменят местата на for цикъла (int ws) с Console.Write(array[r, c]);.

Та, чудя се кой от двата начина (за които съм се сетила досега, сигурна съм че има и други) за намиране на брой цифри в число е по-бърз/изисква по-малко ресурси:
 


int digits = Math.Floor( Math.Log10(array[row, col]));

int digits = array[row, col].ToString().Length;

И най-вече, защо (ако единия начин е по-бърз от другия).

Също така ще се радвам, ако някой има забележки и/или по-добри идеи. :)

Тагове:
0
C# Advanced 17/09/2015 22:15:40
Dargo avatar Dargo 44 Точки

Ако съм разбрал правилно имате предвид ако имаме примерен двумерен масив {1,2,3,4},{10,12,14,16} и искате числата да са едно под друго подравнени мисля, че ConsoleWrite("{0,5}",array[row,col]); би свършило работата,където "5" е величина което определя подравнението и също може да е отрицателно .Не съм добър в обяснението, но се надявам да съм помогнал.

 

1
17/09/2015 22:30:52
Gabbs avatar Gabbs 80 Точки

Не може директно да се ползва променлива var на мястото на alignment-a, но с малко магии го подкарах.

double max = Math.Floor(Math.Log10(array.Cast<int>().Max())) + 2;
string format = "{0," + max +"}";
Console.Write(format, array[r, c]);

Сега метода изглежда от този вид - http://pastebin.com/29ebz7mY

Благодаря много!

0
17/09/2015 23:37:32