comment trouver la plus longue chaîne de caractères dans une chaîne de caractères[] à l'aide de LINQ
J'ai un tableau de chaînes de caractères de longueur variable. Actuellement, j'ai une boucle qui parcourt le tableau pour trouver la chaîne la plus longue dans le tableau. Est-il possible que je pourrait utiliser LINQ pour l'écrire en plus efficace et /ou le moyen le plus propre?
OriginalL'auteur vrrathod | 2011-06-29
Vous devez vous connecter pour publier un commentaire.
Il ne sera pas beaucoup plus efficace, mais il serait un peu propre à faire quelque chose comme:
De sortie: 00005
Il n'y a pas de gain de performance, il est encore en train de faire la même logique itérative que vous avez eu, c'est juste une syntaxe plus concise, qui est ce que LINQ est tout au sujet.
C'est sûr qu'il fait la même chose. Voici comment je l'ai testé. J'ai généré un tableau de 5000 chaînes de caractères. LINQ prend environ 15 cpu tiques sur ma machine. J'ai écrit une ancienne boucle qui compare la longueur des chaînes. Il retourne à 0 tiques. La diff je suppose que c'est pour le tri.
OriginalL'auteur Brandon Moretz
Agrégat syntaxe est un peu plus difficile à lire que les autres méthodes, mais strictement parlant, il est plus efficace que les autres approches que je vois ici qu'il ne nécessite pas de tri. Juste un O(N) de la mise en œuvre.
EDIT: Cette approche, de même que la plupart des autres ici n'existe pas de valeurs null dans votre liste, de peur que f.Longueur de jeter un null réf exception. Un rapide opérateur ternaire (f != null ? f.Longueur : 0) fixer que si elle était valide pour votre énumérable.
OriginalL'auteur Caleb Holt
OriginalL'auteur agent-j
sortie
aaa
De cette façon, le code est clairement de vous obtenir de la chaîne à la longueur max.
strings.OrderByDescending( s => s.Length ).First();
serait de retour dans environ 15 CPU tiques sur ma machine, même si cela peut prendre environ 390. les tiques.Oui, je me rends compte à présent. Je l'ai mis en place car il indique ce qu'il est en train de faire, plutôt que d'utiliser un des effets secondaires de la commande.
OriginalL'auteur Matt Ellen
Même si c'est une vieille question que je voudrais ajouter que la plus efficace de la réponse n'est pas fournie. Il n'est pas en une seule ligne, mais c'est la manière la plus rapide et renvoie une collection des plus longues chaînes, qui OrderBy ou un Agrégat de ne pas fournir. Matt Ellen était le plus proche, avec sa réponse, mais à l'aide de Max dans son, Où le rend plutôt lent lorsque vous travaillez avec une grande collection.
La bonne réponse devrait être:
Envisager l'utilisation de l' ?. (en C# 6.0) et ?? les opérateurs de vérifier les valeurs null si votre collection peut contenir ces.
OriginalL'auteur anthonytimmers
Je n'ai pas de compilateur pour l'instant, mais cela fonctionnera également.
OriginalL'auteur Umut Koseali