-2
votes

Comment compter le nombre de mots dans chaque ligne d'un tableau de chaînes à l'aide des méthodes d'extension linq

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.


1 commentaires

var listaUmCountChars = words.Select(s => s.Split(' ').Length);


3 Réponses :


1
votes
int wordCount = 
    words.Sum((w) => w.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                      .Length);

1 commentaires

Comme string.Split renvoie un tableau, vous devez utiliser Array.Length plutôt que Enumerable.Count , ce qui Enumerable.Count inutilement chaque tableau.



1
votes

Traduction de la méthode d'extension:

var listaUmCountChars = words.Select(s => s.Split(' ').Length);


0 commentaires

0
votes

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
    }
}


0 commentaires