Принтиране на матрица с PadRight() метод?


2

На първа задача от домашното за многомерни масиви трябва да се изведе матрица на конзолата, чиито стойности са въведени първоначално. Матрицата изглежда като матрица, само когато всичките въведени стойности са с еднаква дължина (сиреч едноцифрени, двуцифрени и т.н.). С PadRight() пак се получаваше леко изместване, поради разлика в дължината и колоните не изглеждаха подравнени. Това успях да го оправя (http://pastebin.com/g2yWFUYc), като съм го направил по следния начин: 

Console.Write("{0}".PadRight(15 - matrix[row,col].ToString().Length), matrix[row, col]);

Така си работи добре, но все пак искам да попитам дали има по-лесен начин, при който дори ще мога да сложа прави черти между отделните числа на редовете, така че да са подравнени.




Отговори



1
{0, -5} и ще ти ги подравни от другата страна както искаш

от vodkatini (70 точки)


3
Защо толкова сложно, след като можеш просто да използваш форматиращ низ:
Console.Write("{0, 5}", matrix[row,col]); ?
Това в случая ще подравнява елементите в 5 символа, което мисля, че е достатъчно, но ако искаш, можеш да замениш 5 с колкото искаш – твоят код по-горе подравнява с 15 – сложи вместо 5, 15 и получаваш същото, при това доста по-лесно. :)

от varbanoff (2325 точки)


0
И аз така съм го направил. Направо се обърках като видях това и си чудя от 2-3 минути каква е разликата, а тo няма такава xD А иначе не мога да разбера какво имаш предвид с това да сложиш черти, та да са подравнени ?

от NikolaB (150 точки)


0

Здравей, колега. Когато искам да отпечатам матрица използвам подравняването на самия placeholder {index[,alignment]} , като стойността на самия alignment го съобразявам с това горе долу колко цифрени стойности ще съдържа масива, но в общия случай 5 или 6 изглежда добре.

- Поздрави, Веско. 




0
{0, 5} подравнява отляво, а аз искам отдясно. Ако има как да се направи отдясно ще е супер!

от boyski33 (232 точки)


0
Ами пробвай вместо с 5, с минус 5 ;)

от varbanoff (2325 точки)


0
Може със Math.Log10() да изчислиш нужната дължината за изравняване, понеже числата са в растящ ред и най-голямото число е самия размер на матрицата, сигурно работи супер бавно де
Console.Write("{0} ", (matrix[i, j].ToString()).PadRight((int)Math.Log10(matrix.Length) + 1, ' '));