首页 > 解决方案 > 列表中的项目计数未按预期工作

问题描述

我有一个列表,其中包含 91 项。我目前使用循环遍历并将每一行写入文本文件StreamWriter。我想将列表除以 3,所以在 30 个项目之后我想插入一个空行。到目前为止我有

foreach (var item in textList)
{
   //write to file
   counter++;
   if (counter == totalItems / 3)
   {
      await sw.WriteLineAsync(Environment.NewLine);
   }
}

但它仅适用于前 30 个项目。请注意,该列表可以包含任意数量的项目,但这个特定的项目包含 91 个。但是我总是必须分成 3 个。

标签: c#text-files

解决方案


您要么希望将 91 个项目的列表除以 3,要么将其划分为 30 个项目。你不能两者兼得。如果您在每 30 个项目之后执行此操作,那么您会将第 91 个项目与其他项目分开,在它自己的“块”上,即 1-30, 31-60, 61-90, 91. 如果你有 91 个项目,并且想除以 3,你应该每 31 个项目做一次(这就是我使用的原因Math.Ceiling)。这样你就有 1-31、32-62 和 63-91。

另外,不要使用foreachAND 计数器;改用for循环。您可以使用模数运算符。如此:

int third = Convert.ToInt32(Math.Ceiling(textList.Count / 3.0));
int divider = third - 1;

for (int i = 0; i < textList.Count; i++)
{
    var itemToWrite = textList[i];
    //write to file

    if (i % third == divider) await sw.WriteLineAsync(Environment.NewLine);
}

推荐阅读