List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
int number = lista.Count(n => n <= 5);
我知道我们用这些数字创建列表...但是如何得到6?不了解实际上发生了什么(n => n <= 5)。
答案 0 :(得分:21)
这是对列表中小于或等于5的元素的数量进行计数。由于元素3、4、5、0、3和3满足此条件,因此您获得“ 6”。
n => n <= 5
可能令人困惑。它是lamba表达式(n =>
expression )和谓词/条件(n <= 5
)的组合。
当您调用此Count<TSource>(...)
方法时,您是使用以下签名从Enumerable调用扩展方法:
Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
对于您来说,source
是“ lista”,而您的predicate
是n <= 5
的条件。然后,基本上此代码正在运行:
int count = 0;
foreach (TSource element in source) {
checked {
if (predicate(element)) count++;
}
}
return count;
仅当谓词条件与您提供的条件匹配时,这才是遍历列表的方式。
完整来源:https://referencesource.microsoft.com/#system.core/system/linq/Enumerable.cs,1329
答案 1 :(得分:4)
因为有6个元素3、4、5、0、3、3小于或等于5。
您提到您正在学习c#,所以让我更加清楚。
int number = lista.Count(n => n <= 5);
在那部分中,我们首先开始 n ,这表示让列表的每个项目都为 n ,而 => 表示我指出了一个条件大约而 n <= 5 部分是您的条件。这称为 Lambda表达式。并将该lambda表达式作为Count()方法的参数输入,将得出满足您条件的计数。
答案 2 :(得分:0)
List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
int number = lista.Count(n => n <= 5); // will be 6 and elements are {3,4,5,0,3,3}
var list = lista.Where(n => n <= 5).ToList(); // to check what elements in list after applying <= 5
foreach(int n in list)
{
Console.Write(n+",");
//output is 3,4,5,0,3,3,
}
答案 3 :(得分:0)
以下代码以传统方式翻译了Lambda表达式(n => n <= 5):
List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
// int number = lista.Count(n => n <= 5);
List<int> listb = new List<int>();
foreach(int n in lista)
{
if (n <= 5)
listb.Add(n);
}
int number = listb.Count();