1:       
   2:          public int GetVoteSuggestBySuperUser(int[] keys, int[] values) {
   3:   
   4:              // Creo e popolo la lista dei superUser [che hanno espresso il voto per questo film]
   5:              List<RecommendationData> listtSuperUser = new List<RecommendationData>();
   6:              for (int i = 0; i < keys.Length; i++) {
   7:                  if (keys[i] != 0) {
   8:                      listtSuperUser.Add(new RecommendationData(i,  values[i], keys[i]));
   9:                  }                
  10:              }
  11:              // La ordino per ordine di importanza dei super user
  12:              RecommendationData[] SuperUser = listtSuperUser.ToArray();
  13:              Array.Sort(SuperUser); // after this donators is sorted
  14:   
  15:              // Creo una lista dei primi x SuperUser.
  16:              // Ci entra chi ha il punteggio massimo e 
  17:              // Chi ha il punteggio massimo-1
  18:              int maxNmatch = 0;
  19:              double cmd = 0;
  20:              List<RecommendationData> bestUser = new List<RecommendationData>();
  21:              for (int i = SuperUser.Length - 1; i > 0; i--) {
  22:                  if (i == SuperUser.Length - 1) {
  23:                      maxNmatch = SuperUser[i].nRightMatch;
  24:                  }
  25:                  if (SuperUser[i].nRightMatch + 1 >= maxNmatch) {
  26:                      bestUser.Add(SuperUser[i]);
  27:                      cmd += SuperUser[i].nRightMatch;
  28:                  }
  29:                  else {
  30:                      break;
  31:                  }
  32:              }
  33:              // Inserisco nell'arrey dei voti, il voto pesato di ogni superUser
  34:              double[] arrResult = new double[6];
  35:              for (int i = 0; i < bestUser.Count; i++) {
  36:                  arrResult[bestUser[i].vote] += (bestUser[i].nRightMatch)/cmd;
  37:              }
  38:   
  39:              //Ritorno il voto che ha preso il maggior numero di consensi...
  40:              double maxValue = arrResult.Max();
  41:              return arrResult.ToList().IndexOf(maxValue);
  42:              
  43:          }
  44: