我有一个List< string>其中有五个字符串:
abc
def
ghi
jkl
mno
我有另一个字符串“pq”,我需要知道列表中的每个字符串是否都不以“pq”开头 - 我将如何使用LINQ(.NET 4.0)?
答案 0 :(得分:11)
两个选项:Any
和All
。你应该使用哪一个取决于你发现的更具可读性:
var allNonPq = myList.All(x => !x.StartsWith("pq"));
var notAnyPq = !myList.Any(x => x.StartsWith("pq"));
这些在效率方面实际上是相同的 - 如果有一个以“pq”开头的元素,它们都会停止。如果有的话。
如果你发现自己做了很多,你甚至可以编写自己的扩展方法:
public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
return !source.Any(predicate);
}
此时你有:
var nonePq = myList.None(x => x.StartsWith("pq"));
您是否发现比前两个更具可读性是个人偏好,当然:)
答案 1 :(得分:0)
var notPq = from s in myList where !s.StartsWith("pq") select s;
if (notPq.Any()) {
// At least one item in list doesn't start with pq, possibly do something with each element that doesn't
}
答案 2 :(得分:0)
bool noPQStart = !myList.Any( x=> x.StartsWith("pq"));
答案 3 :(得分:0)
这将产生IEnumerable&lt; bool&gt;
的结果var strings = new string[] { ... };
var results = strings.Select(s => s.StartsWith("pq"));