我有一个整数列表。如何过滤列表中的整数列表为空。
例如: - L = [[0,1,2], [], [1], [1,2,3]]
。如何使用linq过滤它以获取L = [[0,1,2], [1], [1,2,3]]
此处[0,1,2]
是整数列表。
这与我之前的问题有关。我有一个递归函数,它返回一个整数列表列表,我需要过滤掉空列表。
int [] num_list = new int[10]{2, 3, 5, 9, 14, 19, 23, 45, 92, 100};
public List<List<int>> find_solutions(int n, int t, int w)
{
if (n == 2)
{
List<int> s = new List<int>();
for (var i=0; i <= t; i++)
{
if (i * num_list[1] + (t - i) * num_list[0] == w)
{
s.Add(i);
s.Add(t - i);
}
}
return new List<List<int>> { s };
}
List<List<int>> f = new List<List<int>>();
List<List<int>> temp_list = new List<List<int>>();
for (int i=0; i <= Math.Min(t, w/num_list[n-1]); i++)
{
temp_list = find_solutions(n - 1, t - i, w - i * num_list[n - 1]);
// I strongly believe that i am getting empty list
// and I should filter out empty list form temp_list
// and I need to insert 'i' to each list inside list
foreach(List<int> c in temp_list)
{
c.Insert(0, i);
}
f.addRange(temp_list);
}
return f;
}
答案 0 :(得分:1)
int[][] allLists = new int[][] { new int[] { 0, 1, 2 }, new int[] { },
new int[] { 1 }, new int[] { 1, 2, 3 } };
int[][] nonEmtpy = allLists.Where(list => list.Any()).ToArray();
您可以使用Where
和Any
过滤掉任何空条目。
答案 1 :(得分:1)
var listOfLists = L; //To use a better name for L
var nonEmptyLists = listOfLists.Where(innerList => innerList.Any());
您可以对此进行迭代,并/或在必要时致电ToList
或ToArray
答案 2 :(得分:1)
您可以通过以下方式实现这一目标:
L.Where(p=>p.Any()).ToList();
L.Where(p=>p.Count > 0).ToList();
Count属性针对ICollection<T>
进行了优化,其中T是一种类型。 Any()必须构建一个枚举器。因此Count属性比Any()方法
答案 3 :(得分:0)
您可以使用Where()
进行过滤,并要求Count
:
var list = new List<List<int>>();
...
list = list.Where(l => l.Count > 0).ToList();
答案 4 :(得分:0)
喜欢这个吗?
L.Where(i => i.Count() > 0).ToList()