diff_interrankings method

Map<int, Choice> diff_interrankings()

Identifie les choix dont l’interclassement diffère du plus fréquent.

Implementation

Map<int, Choice> diff_interrankings() {
  Map<int, Choice> diff_dict = {};
  if (choices.isEmpty) return {};
  // Compter la fréquence de chaque interclassement
  Map<double, int> interrankFrequencies = {};
  for (var choice in choices.values) {
    interrankFrequencies.update(
      choice.interranking,
          (count) => count + 1,
      ifAbsent: () => 1,
    );
  }
  // Trouver l'interclassement le plus fréquent
  double reference_Rank;
  List<double> mostCommonRanks = interrankFrequencies.entries
      .where((e) => e.value > 1)
      .map((e) => e.key)
      .toList();
  if (mostCommonRanks.isNotEmpty) {
    // Si des interclassements sont communs, choisir le plus fréquent
    reference_Rank = mostCommonRanks.first;
    int maxFreq = interrankFrequencies[reference_Rank]!;
    for (var rank in mostCommonRanks) {
      if (interrankFrequencies[rank]! > maxFreq) {
        reference_Rank = rank;
        maxFreq = interrankFrequencies[rank]!;
      }
    }
  } else {
    // Sinon, prendre le plus élevé
    reference_Rank = interrankFrequencies.keys.reduce((a, b) => a > b ? a : b);
  }

  // Comparer les autres vœux au reference_Rank
  for (var entry in choices.entries) {
    double currentRank = entry.value.interranking;
    if ((currentRank - reference_Rank).abs() > 1e-6) {
      diff_dict[entry.key] = entry.value;
    }
  }

  return diff_dict;
}