generateInitialRank method
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();
}