findBestMatch method

dynamic findBestMatch(
  1. Map selectedRule,
  2. Map<String, dynamic> decisionSubroutes
)

Finds best match for given rule in possible subroutes

Implementation

dynamic findBestMatch(
  Map selectedRule,
  Map<String, dynamic> decisionSubroutes,
) {
  final entries = decisionSubroutes.entries.toList();

  // ignore: cascade_invocations
  entries.sort(
    (first, second) => -first.value.compareTo(second.value),
  );

  var latestSelected = selectedRule[entries[0].key];
  final maxValue = entries[0].value;
  int index = 1;
  var maxEquals = 0;

  while (index < entries.length && entries[index].value == maxValue) {
    final matches = entries[index]
        .key
        .characters
        .where(
          (element) => element == '=',
        )
        .length;

    if (matches > maxEquals) {
      maxEquals = matches;
      latestSelected = selectedRule[entries[index].key];
    }

    index++;
  }

  return latestSelected;
}