我正在检查是否有任何单词不包含元音。我期待的答案是肯定还是否定。
这是我的代码:
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"));
我如何得到答案?
答案 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();
或者您甚至可以根据原始字符串检查结果。