【问题标题】:Create IEnumerable collections dynamiclly动态创建 IEnumerable 集合
【发布时间】:2020-03-20 11:55:11
【问题描述】:

我有这个问题,我得到了一个包含 5000 和 2000 个条目的列表.. 问题是每个人我都想使用我必须手动输入的 5000 个条目列表:

IEnumerable<string> partList1;
IEnumerable<string> partList2;
IEnumerable<string> partList3;
IEnumerable<string> partList4;

然后我去:

partList1 = SplitList(IDList, 0, 999); //args = list,skipvalue,takevalue

我必须对所有 4 个列表执行此操作,如果我使用 2000 个条目列表,我只需要两个部分列表。 我怎样才能让它动态地使 999 适合它自己创建的 partLists 的列表?

我尝试了类似的方法:

for(int i = 0; i < IDList.Count() / 999; i++) {
//and here I stuck
}

【问题讨论】:

  • 我不太明白这里的问题。能否请您详细说明一下。
  • @Thangadurai 我正在尝试动态创建一个 IEnumerable 来确定给定数字中 999 的数量,例如当数字为 2000 时,我可以创建 2 个 IEnumerable,如果数字就像 5000 我可以创建 5 个 IEnumerable // 我真的不知道这是否有意义:/ 或者我是否太笨而无法完成此操作
  • @darby,实现它的一种简单方法是使 partlist 本身成为一个列表,即 IEnumerable&lt;IEnumerable&lt;string&gt;&gt; partlist 并根据需要填写。
  • 所以你想把一个列表分成几个更小的特定大小的一次?
  • @darby 你能编辑你的问题并进一步澄清你的问题吗?还不够清楚。

标签: c# list ienumerable


【解决方案1】:

如果我正确理解了您的问题,您正试图将一些列表项拆分为 1000 个(或 999 个;不清楚)项的块,并为每个块创建一个 IEnumerable&lt;string&gt;。如果是这样,您可以创建一个List&lt;IEnumerable&lt;string&gt;&gt; 来动态创建您的列表并使用.Skip() 和.Take() 链接方法来“拆分”主列表。

试试这样的:

var listOfLists = new List<IEnumerable<string>>();
const int chunkSize = 1000;

int consumed = 0;
while (consumed < IDList.Count)
{
    listOfLists.Add(IDList.Skip(consumed).Take(chunkSize).ToList());
    consumed += chunkSize;
}

【讨论】:

  • 在"while"循环中会有IDlist的多次枚举,最好在循环前将其转换为数组,var idList = IDList as string[] ?? IDList.ToArray();而不是每个chunk都用.ToList()进行转换
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多