5

各文字列の単語数に基づいて文字列のリストをフィルタリングしようとしています。WordCount = NumberOfSpaces + 1 となるように、文字列の末尾にある空白をすべて削除してから、文字列に残っている空白の数を数えることを想定しています。これが最も効率的な方法でしょうか? 文字数に基づいてフィルタリングする場合、次のようにするとうまくいくことはわかっています... C#/LINQ を使用して簡潔に記述する方法がわかりません。

if (checkBox_MinMaxChars.Checked)
{
    int minChar = int.Parse(numeric_MinChars.Text);
    int maxChar = int.Parse(numeric_MaxChars.Text);

    myList = myList.Where(x => 
                              x.Length >= minChar && 
                              x.Length <= maxChar).ToList();
}

単語を数えるためのアイデアはありますか?

更新:これは魅力のように機能しました...ありがとうマシュー:

int minWords = int.Parse(numeric_MinWords.Text);
int maxWords = int.Parse(numeric_MaxWords.Text);

sortBox1 = sortBox1.Where(x => x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() >= minWords &&
                               x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() <= maxWords).ToList();
4

4 に答える 4

8

次のようにスペースを区切り文字として確実に使用できることを示したので、より単純な方法でアプローチします。

var str = "     the string to split and count        ";
var wordCount = str.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count();

編集:

最適なパフォーマンスが必要で、メモリ使用量が懸念される場合は、独自のメソッドを作成して活用できますIndexOf()(このような問題を実装する方法はたくさんありますが、ゼロからコードを設計するよりも再利用することを好みます)。

    public int WordCount(string s) {
        const int DONE = -1;
        var wordCount = 0;
        var index = 0;
        var str = s.Trim();
        while (index != DONE) {
            wordCount++;
            index = str.IndexOf(" ", index + 1);
        }
        return wordCount;
    }
于 2012-12-19T07:45:10.497 に答える
3

あなたは言葉を数えることにアプローチしても大丈夫です。String.Splitより多くのメモリ使用量に対して同様の結果が得られます。

int WordCount(string text)関数を実装して Where に渡すだけではありません。

myList.Where(s => WordCount(s) > minWordCount)
于 2012-12-19T07:45:41.310 に答える
1

指定された範囲内の単語数を持つすべての文字列が必要ですか?

int minCount = 10;
int maxCount = 15;
IEnumerable<string> result = list
    .Select(String => new { String, Words = String.Split() })
    .Where(x => x.Words.Length >= minCount
             && x.Words.Length <= maxCount)
    .Select(x => x.String);
于 2012-12-19T08:01:57.040 に答える
1

スペースを使用して文字列を配列に分割し、それをカウントするのはどうですか?

s.Split().Count()

スペースを削除しました:)

于 2012-12-19T07:45:23.590 に答える