J'ai un tableau de chaînes, comme dans l'exemple ci-dessous:
var CountWordsArray = words.Select(s => s...);
Pour compter les mots dans chacune des chaînes, c'est assez simple, on peut utiliser des words.Split(' ').Length
, et un foreach
créant un tableau contenant le nombre de mots dans chaque chaîne, ou placer les comptes individuels directement dans un array, appelons-le un tableau de nombres, avec la syntaxe de la requête:
var countWordsArray = from s in words select s.TrimEnd(' ').Split(' ').Length;
Ce que je voudrais faire à la place, c'est utiliser des méthodes d'extension, quelque chose comme:
string[] words = { "C#", "I like C#", "My string is this", "Just words", "Delegates and Linq"};
Les heures sont longues mais la journée est courte, alors j'apprécierais vraiment l'aide. Je suis sûr qu'il me manque quelque chose de basique mais je ne peux pas vraiment mettre le doigt dessus.
3 Réponses :
int wordCount = words.Sum((w) => w.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Length);
Comme string.Split
renvoie un tableau, vous devez utiliser Array.Length
plutôt que Enumerable.Count
, ce qui Enumerable.Count
inutilement chaque tableau.
Traduction de la méthode d'extension:
var listaUmCountChars = words.Select(s => s.Split(' ').Length);
Vous pouvez également créer une méthode d'extension pour faire le nombre de mots.
using System.Collections.Generic; using System.Linq; public static class StringExtensions { public static int WordCount(this string me) { return me.Split(' ').Length; } } class Program { static void Main(string[] args) { string[] words = { "C#", "I like C#", "My string is this", "Just words", "Delegates and Linq"}; List<int> listaUmCountChars = words.Select(s => s.WordCount()).ToList(); // 1 3 4 2 3 int totalWordCount = words.Sum(s => s.WordCount()); // 13 } }
var listaUmCountChars = words.Select(s => s.Split(' ').Length);