toString method

  1. @override
String toString()
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');
}