c#过滤整数列表的列表,如果为空

时间:2016-04-05 16:13:25

标签: c# linq

我有一个整数列表。如何过滤列表中的整数列表为空。

例如: - 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;
        }

5 个答案:

答案 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();

您可以使用WhereAny过滤掉任何空条目。

答案 1 :(得分:1)

var listOfLists = L; //To use a better name for L
var nonEmptyLists = listOfLists.Where(innerList => innerList.Any());

您可以对此进行迭代,并/或在必要时致电ToListToArray

答案 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()