我正在使用以下内容:
int[] a = {1, 2, 3, 0, 5, 0};
int x = a.Select(b => b != 0).Count();
我的值是 6 ,我怎么能 4 而不是 6 。
有人可以指导我。
答案 0 :(得分:8)
int[] a = {1, 2, 3, 0, 5, 0};
int x = a.Where(b => b != 0).Count();
答案 1 :(得分:7)
其他人建议使用Where
后跟Count
,但你可以更简单地使用它:
int x = a.Count(b => b != 0);
这个overload of Count
采用谓词,基本上只计算与谓词匹配的源序列的元素。
正如其他人所说,它不适用于Select
的原因是项目 - 它不会过滤 。你可以使用:
// Works but is horrible...
int x = a.Select(b => b != 0).Count(z => z);
...但我确实建议你不要。
请注意,这些都不会影响您的标题,即查找正值。为此,您需要:
int x = a.Count(b => b > 0);
答案 2 :(得分:6)
答案 3 :(得分:3)
更改此行
int[] a = {1, 2, 3, 0, 5, 0};
int x = a.Select(b => b != 0).Count();
到
int[] a = {1, 2, 3, 0, 5, 0};
int x = a.Where(b => b != 0).Count();
之间的差异
<强>其中强>
查找匹配的项目,并仅返回那些项目。
- &GT; IEnumerable<A>
in,IEnumerable<A>
out
选择强>
返回源中所有项的内容。那些东西可能是物品本身,但通常更像某种投射。
- &GT; IEnumerable<A>
in,IEnumerable<B>
out
答案 4 :(得分:2)
您的代码只是将集合投影到bools,如果值不为0则为true,而对于文件管理器用户,则为false
e.g。
int[] a = {1, 2, 3, 0, 5, 0};
int x = a.Where(b => b != 0).Count();
答案 5 :(得分:2)
您的错误是{1, 2, 3, 0, 5, 0}.Select(b => b != 0)
只是{true, true, true, false, true, false}
,这又是6项。您最好使用Where
,这样可以为您提供已过滤的序列:{1, 2, 3, 5}
。对于生成的序列,您可以应用Count
或其他任何内容。