Je travaille avec deux listes. Le premier contient une grande séquence de chaînes. La seconde contient une liste de chaînes plus petites. J'ai besoin de trouver où la deuxième liste existe dans la première liste.
J'ai travaillé avec énumération et, en raison de la grande taille des données, c'est très lent, j'espérais une manière plus rapide. P> et j'aurais besoin de x à = 2. p> p>
4 Réponses :
Vous pouvez utiliser la méthode d'extension d'intersect à l'aide de l'espace nomoce system.linq code>
Cela ne montre que les articles communs aux deux listes. Je cherche de grandes séquences de données à la recherche de modèles.
Je pense que vous demandez quelque chose comme celui-ci faire la commande: Stackoverflow.com/Questtions/28301074/...
Méthode somemagique implémentée Comme ci-dessous, cela retournera -1 si aucune correspondance n'a été trouvée, sinon il retournera l'index d'élément de démarrage dans la première liste.
private int SomeMagic(List<string> first, List<string> second) { if (first.Count < second.Count) { return -1; } for (int i = 0; i <= first.Count - second.Count; i++) { List<string> partialFirst = first.GetRange(i, second.Count); if (Enumerable.SequenceEqual(partialFirst, second)) return i; } return -1; }
C'est exactement ce que le médecin a commandé. Merci.
Je recommanderais d'éviter d'utiliser gettrange code> pour éviter le coût de l'affectation répétée de la liste.
prendre code> serait probablement plus rapide.
OK, voici ma variante avec Old-Good-For-Loop:
var first = new List<string> { "AAA","BBB","CCC","CCC","CCC","CCC","EEE","FFF" }; var second = new List<string> { "CCC","CCC","CCC","EEE" };
Si vous êtes prêt à utiliser Morelinq puis envisagez d'utiliser la fenêtre Code>:
fenêtre code> vous permettra de regarder "tranches" des données en morceaux (basé sur la longueur de votre
secondaire code > liste). Ensuite,
séquenceequal code> peut être utilisé pour voir si la tranche est égale à
secondaire code>. Si c'est le cas, l'index code> code> peut être renvoyé. S'il ne trouve pas de correspondance,
null code> sera retourné. P> p>
upvote ceci comme un moyen plus élégant et plus efficace qu'une réponse acceptée
Pouvez-vous nous montrer ce que vous avez essayé jusqu'à présent?