12

我希望能够检查字符串是否包含列表中的所有值;因此,如果您的答案中包含列表中的所有“关键词”,它只会给您一个“正确答案”。这是我累了一半失败的东西;(不检查所有数组,只接受一个)。代码我累了:

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

基本上我想做的是:

问:心理学的定义是什么?

arraylist中的关键词:学习,心理过程,行为,人

答:心理学是对人类心理过程行为研究

现在,当且仅当上面的答案包含所有关键词时,我的代码才会接受答案。我希望我已经清楚这一点。

编辑:谢谢大家的帮助。所有答案都已投票,我感谢大家的快速回答。我投票赞成可以轻松适应任何代码的答案。:)

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");
}

当函数为列表中的所有项目返回 true 时,该All方法返回 true。

于 2013-02-06T11:50:07.637 回答