12

リストに保持されているすべての値が文字列に含まれているかどうかを確認できるようにしたい。したがって、答えのリストからすべての「キーワード」がある場合にのみ、「正しい答え」が得られます。半分失敗する疲れたものがあります;(すべての配列をチェックするのではなく、1つだけを受け入れます)。疲れたコード:

 foreach (String s in KeyWords)
        {
            if (textBox1.Text.Contains(s))
            {
                correct += 1;
                MessageBox.Show("Correct!");
                LoadUp();
            }
            else
            {
                incorrect += 1;
                MessageBox.Show("Incorrect.");
                LoadUp();
            }
        }

基本的に私がやりたいことは次のとおりです。

質問: 心理学の定義は何ですか?

配列リストのキーワード:研究、精神プロセス、行動、人間

答え: 心理学は、人間精神的プロセス行動研究です

上記の回答にすべてのキーワードが含まれている場合にのみ、私のコードは回答を受け入れます。これで明確になったことを願っています。

編集:ご協力いただきありがとうございます。すべての回答が投票されました。迅速な回答をありがとうございました。どんなコードにも簡単に適応できる答えに投票しました。:)

4

3 に答える 3

17

LINQ の使用:

// case insensitive check to eliminate user input case differences
var invariantText = textBox1.Text.ToUpperInvariant();
bool matches = KeyWords.All(kw => invariantText.Contains(kw.ToUpperInvariant()));
于 2013-02-06T11:50:32.420 に答える
6

これは役立つはずです:

 string text = "Psychology is the study of mental process and behaviour of humans";
 bool containsAllKeyWords = KeyWords.All(text.Contains);
于 2013-02-06T11:53:20.630 に答える
2

次のような LINQ メソッドのいくつかを使用できます。

if(Keywords.All(k => textBox1.Text.Contains(k))) {
   correct += 1;
   MessageBox.Show("Correct");
} else {
   incorrect -= 1;
   MessageBox.Show("Incorrect");
}

All関数がリスト内のすべての項目に対して true を返す場合、メソッドは true を返します。

于 2013-02-06T11:50:07.637 に答える