2

目前我有一些类似下面的代码,它基于 NoOfRows 属性返回是否所有数据都已输入到列表中:

switch (NoOfRows)
            {
                case 1:
                    return InputList1.Any();
                case 2:
                    return InputList1.Any() && InputList2.Any();
                case 3:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any();
                case 4:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any();
                case 5:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any();
                case 6:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any() && InputList6.Any();
                case 7:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any() && InputList6.Any() && InputList7.Any();
                case 8:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any() && InputList6.Any() && InputList7.Any() && InputList8.Any();
                case 9:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any() && InputList6.Any() && InputList7.Any() && InputList8.Any() && InputList9.Any();
                case 10:
                    return InputList1.Any() && InputList2.Any() && InputList3.Any() && InputList4.Any() && InputList5.Any() && InputList6.Any() && InputList7.Any() && InputList8.Any() && InputList9.Any() && InputList10.Any();
                default:
                    return false;
            }

我认为重构此代码并拥有一个可能会更好,List<List<int>> or a Dictionary<int,List<int>>但是我将如何执行上述操作以返回集合中的每个列表是否包含某些内容?

List<List<int>> values = new List<List<int>>(){InputList1, InputList2 ... InputList10};
var lists = values.Take(NoOfRows);
lists.. //check each item and return value of Any for each one
4

5 回答 5

6

如果您只想知道任何子列表是否为空,请尝试以下操作:

var values = new List<List<int>>();  // create and load up...

...

// returns true if any sub-list is EMPTY
var isAnyEmpty = values.Any(l => !l.Any());

这将检查列表列表中是否存在任何没有项目的列表。

但是,如果您想要那些为空的子列表的索引,您可以将 Any() 的结果存储在 all 上:

// will return a lists of bools for Any() applied to each sub-list
var listStates = values.Select(l => l.Any()).ToList();

然后,值所在的任何结果的索引false将是一个没有任何项目的列表。Select或者,或者,您可以直接使用传递索引的特殊形式。

于 2012-04-26T14:07:17.690 回答
4

嵌套列表可以很好地工作。您可能想研究selectmany的使用

但我认为你想要的代码是这样的:

var nested = new List<List<int>>();
// put data in it

nested.All((inner) => inner.Any());
于 2012-04-26T14:07:00.020 回答
1
var listoflists = new List<List<int>>;
bool allNonEmpty = listoflists.All(list => list.Any());
于 2012-04-26T14:08:36.130 回答
0

您可能想尝试这样的事情:

    bool ContainsEmptyCollection(IEnumerable<List<int>> collections)
    {
        foreach (var collection in collections)
        {
            if (collection.Count == 0)
                return true;
        }

        return false;
    }
于 2012-04-26T14:09:23.363 回答
0

你的意思是这样的:

        List<List<int>> list = new List<List<int>>();
        bool anyNonEmpty = list.Any(x => x.Any());
于 2012-04-26T14:10:32.990 回答