c# - 列表中的项目计数未按预期工作
问题描述
我有一个列表,其中包含 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 个。
解决方案
您要么希望将 91 个项目的列表除以 3,要么将其划分为 30 个项目。你不能两者兼得。如果您在每 30 个项目之后执行此操作,那么您会将第 91 个项目与其他项目分开,在它自己的“块”上,即 1-30, 31-60, 61-90, 91. 如果你有 91 个项目,并且想除以 3,你应该每 31 个项目做一次(这就是我使用的原因Math.Ceiling
)。这样你就有 1-31、32-62 和 63-91。
另外,不要使用foreach
AND 计数器;改用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);
}
推荐阅读
- docker - 为什么我的 Dockerfile 不能与我的 Golang 应用程序一起使用?
- c# - 为什么我的 try catch 没有得到这个异常:Exception throw: 'OpenQA.Selenium.NoSuchElementException' in WebDriver.dll?
- java - 尝试将 HTTP 响应从服务器转发到 Java 浏览器。但是,当我在浏览器中打开网站时,结果是“八位字节流”
- python - 如何在python函数的元组中返回两个值
- vb.net - 如何将图像添加到新的 Listview 项?
- ios - 在 Mac 催化剂上构建时,警报窗口位于模态表单屏幕下方
- c++ - 互斥量后原子变量的访问是否需要内存顺序?
- angular - ESLint 抱怨空的构造函数和 ngOnInit-implementation
- python - 使用 Matplotlib 鼠标事件获取图像的 rgba 值
- css - Ampersand Sass 选择器不适用于样式化组件中的同级选择器