toString method
override
Returns a readable String representation of the instance including its row indices, column names & data
Implementation
@override
String toString() {
final indexColumnLength = length.toString().length;
final indexColumnDelimiter = ' | ';
final consecutiveElementDelimiter = ' ';
final List<int> columnWidths = columns()
.mapIndexed((index, col) =>
(col + [columnNames[index]]).map((el) => el.toString().length).max)
.toList();
return ' '.padLeft(indexColumnLength + indexColumnDelimiter.length) +
columnNames
.mapIndexed((i, el) => el.padRight(columnWidths[i]))
.join(consecutiveElementDelimiter) +
'\n' +
IterableZip([
Iterable.generate(length)
.map((e) => e.toString().padLeft(indexColumnLength)),
map((row) => row
.mapIndexed((index, element) =>
element.toString().padRight(columnWidths[index]))
.join(consecutiveElementDelimiter))
]).map((e) => e.join(indexColumnDelimiter)).join('\n');
}