每个外部列表中所选项目的计数
本文关键字:项目 选项 外部 列表 | 更新日期: 2023-09-27 18:07:18
我有一个列表,其中每个元素是整数的列表。我想开发LINQ来计算每个列表中==到0的整数的数量。
定义列表
var prisoners = new List<List<int>>(n);
for (int c = 0; c < n; c++)
{
int[] l = new int[n];
prisoners.Add(new List<int>());
prisoners[c] = l.ToList<int>();
}
所以我做了一个包含n个整数的n个列表的List,它们都是0 -我感兴趣的是每个列表中0的个数,特别是这个数的最小值,直到我开始处理这些列表时,它是n。
我想到了
var q = (from arr in prisoners from int tally in arr
where tally == 0
group arr by arr into grp select grp.Count()).Min();
现在的问题似乎是,当一个列表中没有零,它离开查询,我没有得到答案零。一开始我确实得到了答案'n'(当它们都是零时)-一旦列表中没有零,我就不会得到最小零计数的答案0。
如何在列表中包含的任何列表中找到0的最小计数?(最终将为零)。我需要这样做,以便所有的列表都进入分组,然后我计算有多少个零-但我不知道怎么做。
例子int n = 3;
var prisoners = new List<List<int>>(n);
for (int c = 0; c < n; c++)
{
int[] l = new int[n];
prisoners.Add(new List<int>());
prisoners[c] = l.ToList<int>();
}
//return 3 below - that is correct at this point
var q = (from arr in prisoners from int tally in arr where tally == 0 group arr by arr into grp select grp.Count()).Min();
prisoners[1] = (new int[] { 1, 1, 1 }).ToList();
prisoners[2] = (new int[] { 1, 1, 0 }).ToList();
//so now one of the arrays has zero zeroes in it, but I get the answer 1 - zero was wanted, that is to say
//element 1 has a zero count of zero
q = (from arr in prisoners from int tally in arr where tally == 0 group arr by arr into grp select grp.Count()).Min();
问题是,如果内部列表没有零,那么您将过滤掉它,因此您不会得到0作为正确的最小值。要解决这个问题,您可以执行以下操作。
var q = prisoners.Min(row => row.Count(x => x == 0));
只要prisoners
不为空就可以工作。在这种情况下,它将抛出一个异常。如果您希望在这种情况下结果也为0,则可以执行以下操作:
var q = prisoners.DefaultIfEmpty().Min(row => row?.Count(x => x == 0)) ?? 0;
或者如果你没有c# 6
var q = prisoners.Any() ? prisoners.Min(row => row.Count(x => x == 0)) : 0;
你不需要分组:
var q = prisoners.Min(arr=>arr.Count(tally=>tally==0));
作为查询表达式:
var q = (from arr in prisoners select arr.Count(tally=>tally==0)).Min();