Comparer la liste et renvoyer les correspondances en c #

Quel est le moyen le plus rapide et le meilleur de comparer 2 listes et de renvoyer un match? Un seul match est possible. List1 contient des données dynamics d’une firebase database.

La façon dont je le fais maintenant:

foreach (var item1 in List1) { foreach (var item2 in List2 ) { if(item2 == item1) ssortingng match = item1; } } 

J’ai l’impression que cela peut être fait beaucoup plus rapidement.

Utilisez Enumerable.Intersect .

 var matchItem = List1.Intersect(List2).First(); 

Vous ne savez pas vraiment à quel point votre code actuel est plus rapide, vous pouvez le mesurer à l’aide de Chronomètre. Mais dans votre code actuel, vous devriez casser votre boucle intérieure et extérieure pour trouver la correspondance. Quelque chose comme:

 foreach (var item1 in List1) { ssortingng match = null; foreach (var item2 in List2) { if (item2 == item1) { match = item1; break; } } if (match != null) break; } 

Vous avez plusieurs façons de le faire. Cela dépend principalement des données que vous essayez de faire correspondre.

  • La première chose à faire est d’avoir une liste sortingée
  • alors si vous connaissez la valeur moyenne de la liste, vous pouvez parcourir votre liste du début à la fin.
  • mais surtout juste retourner votre valeur depuis que vous l’avez trouvé

les 2 premiers points ne fonctionneront également que si votre liste contient une valeur numérique sur laquelle vous pouvez compter pour identifier un élément.

La première optimisation que vous pouvez faire est:

 Foreach (var item1 in List1) { Foreach (var item2 in List2 ) { if(item2 == item1) return item1; } } 

Si vous avez vraiment besoin de cette routine très rapide, vous devrez procéder à des optimisations en fonction des données figurant dans vos listes.

De plus, si vos données figurent dans les deux listes, vous pouvez générer un hashcode pour chaque chaîne ( ssortingng.GetHashCode ), puis vous appuyer sur le hascode pour sortinger et rechercher dans vos listes.

Il y a beaucoup d’autres façons, mais tout dépend:

  • la quantité de données que vous avez dans vos listes (si vous n’avez que 100 éléments, vous ne verrez pas beaucoup de gains de performances)
  • si vos listes sont statiques ou dynamics
  • combien de fois ils peuvent changer s’ils sont dynamics
  • combien de fois faites-vous une recherche dans ces listes

Vous pouvez court-circuiter les boucles lorsque vous trouvez des correspondances. Vous pouvez ensuite utiliser une méthode qui renvoie l’élément correspondant, ou null si aucune ne correspond (en supposant que les éléments sont des types de références):

 foreach (var item1 in List1) foreach (var item2 in List2) if (item2 == item1) return item1; return null;