使用linq检查数组中是否有任何单词不包含元音

时间:2016-05-12 15:38:58

标签: c# arrays linq

我正在检查是否有任何单词不包含元音。我期待的答案是肯定还是否定。

这是我的代码:

string sentence = "I'm thinking about buying a house in the mountains.";
string[] words = sentence.Split(' ');

//1. Check if any words do not contain a vowel
IEnumerable<string> query1 = words
       .Where(n => !n.Contains("a") 
                  || !n.Contains("e") 
                  || !n.Contains("o") 
                  || !n.Contains("i") 
                  || !n.Contains("r"));

我如何得到答案?

2 个答案:

答案 0 :(得分:2)

您想使用&&代替||,然后您可以像这样使用Any方法:

bool some_words_do_not_have_a_vowel = words
    .Where(n => !n.Contains("a") && !n.Contains("e") && !n.Contains("o") && !n.Contains("i") && !n.Contains("r"))
    .Any();

在这种情况下你可以像这样摆脱Where

bool some_words_do_not_have_a_vowel =
    words
    .Any(n => !n.Contains("a") && !n.Contains("e") && !n.Contains("o") && !n.Contains("i") && !n.Contains("r"));

请注意,这是区分大小写的。您可能希望进行不区分大小写的搜索。

顺便说一句,r不是元音。

答案 1 :(得分:1)

要收集没有元音的单词,您可以检查元音的集合:

var vowels = new char[] { 'a', 'i', 'u', 'e', 'o', 'A', 'I', 'U', 'E', 'O' };

然后检查每个字符串(单词),如果一个单词包含集合中的任何元音。您只需要包含任何元音的单词:

var query = words.Where(x => !x.ToCharArray().Any(c => vowels.Contains(c)); //get words without vowels.

如果您想检查所有收藏中是否有任何单词都有元音。只需将查询结果与Any:

一起使用即可
bool result = query.Any();

或者您甚至可以根据原始字符串检查结果。