1:   
   2:          public SimilarityResoult UserSimilaryty(Dictionary<int, SimilarityFilmsData> _similarityDictionary) {
   3:   
   4:              int total = 0; // film visti in comune
   5:   
   6:              //double VotePoints_opposite = 0;
   7:              double VotePoints_disagree = 0.3;
   8:              double VotePoints_discord = 0.5;
   9:              double VotePoints_similar = 0.8;
  10:              //double VotePoints_same = 1;
  11:   
  12:              int countvote_opposite = 0; // Ogni volta che i voti sono mooolto contrastanti
  13:              int countvote_disagree = 0; // Molto in disaccordo ma nn l'opposto un pò in disaccordo es io 2 tu 3 
  14:              int countvote_discord = 0; // Voto un pò in disaccordo es io 2 tu 3 
  15:              int countvote_similar = 0; // Voto simile es io 4 tu 5, io 2 e tu 1
  16:              int countvote_same = 0;  // Voto uguale tutti e 2 votiamo 3 
  17:   
  18:              List<int> listSuggestAtoB = new List<int>(); // Film che A suggerisce ad B
  19:              List<int> listSuggestBtoA = new List<int>(); // Film che B suggerisce ad A
  20:   
  21:              foreach (KeyValuePair<int, SimilarityFilmsData> row in _similarityDictionary) {
  22:   
  23:                  int filmID = row.Value.filmID;
  24:                  int votoUserA = row.Value.UserAVote;
  25:                  int votoUserB = row.Value.UserBVote;
  26:   
  27:                  // Film che A e B non hanno visto e che consiglia all'altro
  28:                  if ((votoUserA == 0) && ((votoUserB == 5) || (votoUserB == 4))) {
  29:                      listSuggestBtoA.Add(filmID);
  30:                      continue;
  31:                  }
  32:                  if ((votoUserB == 0) && ((votoUserA == 5) || (votoUserA == 4))) {
  33:                      listSuggestAtoB.Add(filmID);
  34:                      continue;
  35:                  }
  36:   
  37:                  // il film  A o B non lo hanno visto, quindi inutile continuare il cofronto, esco dal ciclo
  38:                  if ((votoUserA == 0) || (votoUserB == 0)) {
  39:                      continue;
  40:                  }
  41:   
  42:                  // il Film è stato visto da entrambi ed entrambi, ha senso fare il confronto
  43:   
  44:                  total++; // Incremento il contatore
  45:   
  46:                  // Stesso voto = maggior "legame"
  47:                  if ((votoUserA == votoUserB) && (votoUserA != 0)) {
  48:                      //score += VotePoints_same;
  49:                      countvote_same++;
  50:                      continue;
  51:                  }
  52:   
  53:                  // Voto congiunto che mi permette di dare un Grado di "amicizia" in base hai 2 voti
  54:                  // Es A vota 3 e B vota 2
  55:                  // _choose = (3*10)+2 = 32;
  56:                  int _choose = (votoUserA * 10) + votoUserB;
  57:   
  58:                  switch (_choose) {
  59:                      // Molto simili 1 e 2 oppure 4 o 5
  60:                      case 12:
  61:                      case 21:
  62:                      case 45:
  63:                      case 54:
  64:                          //score += VotePoints_similar;
  65:                          countvote_similar++;
  66:                          break;
  67:                      // Non uguali ma qualcosa in comune ...
  68:                      case 34:
  69:                      case 43:
  70:                          //score += VotePoints_disagree;
  71:                          countvote_disagree++;
  72:                          break;
  73:                      // In contrasto ma non agli antipodi ...
  74:                      case 13:
  75:                      case 23:
  76:                      case 32:
  77:                      case 53:
  78:                          //score += VotePoints_discord;
  79:                          countvote_discord++;
  80:                          break;
  81:                      // Pareri piu' discordanti possibile ...
  82:                      case 14:
  83:                      case 15:
  84:                      case 24:
  85:                      case 25:
  86:                      case 31:
  87:                      case 35:
  88:                      case 41:
  89:                      case 42:
  90:                      case 51:
  91:                      case 52:
  92:                          //score += VotePoints_opposite;
  93:                          countvote_opposite++;
  94:                          break;
  95:                      default:
  96:                          string x = "errore";
  97:                          break;
  98:                  }
  99:              }
 100:   
 101:              int similarity = 0;
 102:              if (total != 0) {
 103:                  double temp = ((countvote_disagree * VotePoints_disagree) + (VotePoints_discord * countvote_discord) + (VotePoints_similar * countvote_similar) + (countvote_same));
 104:                  temp = temp / total;
 105:                  similarity = Convert.ToInt32(temp * 100);
 106:              }
 107:   
 108:              return new SimilarityResoult(similarity, listSuggestBtoA, listSuggestAtoB, countvote_opposite, countvote_disagree, countvote_disagree, countvote_similar, countvote_same);
 109:   
 110:          }