generateInitialRank method

List<String> generateInitialRank({
  1. required int sizeOfItems,
  2. int rankLength = 5,
  3. String startRankLetter = 'a',
  4. String endRankLetter = 'z',
})

Generate a list of initial rank for re-balancing items

sizeOfItems indicate number of ranks that must be generated rankLength specify initial base rank letter size, default to 5 startRankLetter specify start letter to generate the initial the base rank, default is 'a' endRankLetter specify end letter to generate the initial the base rank, default is 'z'

Implementation

List<String> generateInitialRank({
  required int sizeOfItems,
  int rankLength = 5,
  String startRankLetter = 'a',
  String endRankLetter = 'z',
}) {
  final startRandPos = startRankLetter.codeUnits.first;
  final endRankPos = endRankLetter.codeUnits.first;

  if (startRandPos < 'a'.codeUnits.first ||
      endRankPos > 'z'.codeUnits.first) {
    throw LexoRankException('Only support letter from `a` to `z`');
  }

  final items = <String>[];
  for (int i = startRandPos; i < endRankPos + 1; i++) {
    final c = String.fromCharCode(i);
    items.add(List.generate(rankLength, (index) => c).join());
  }

  while (items.length < sizeOfItems) {
    final newList = _generateBetweenTupleItems(items);
    items.addAll(newList);
    items.sort();
  }
  return items.toSet().take(sizeOfItems).toList();
}