c# - 如何在C# for loop Logic中将三分为三
问题描述
如何将三分为三,剩余数量也需要绑定。请在下面找到我添加了一些逻辑,但它失败了,这不是预期的值。请通过for循环。我在哪里做错了。请纠正我。
预期输出:
总数:8
int m = 0;
for (int i = 1; i <=8; i++)
{
if (i % 3 == 0)
{
Console.WriteLine("Carousel Item");
for (int j = m; j < i; j++)
{
Console.WriteLine("Carousel Card : " + j);
m++;
}
}
}
预期输出:
Carousel Item
Carousel Card : 0
Carousel Card : 1
Carousel Card : 2
Carousel Item
Carousel Card : 3
Carousel Card : 4
Carousel Card : 5
Carousel Item
Carousel Card : 6
Carousel Card : 7
但我的输出:
Carousel Item
Carousel Card : 0
Carousel Card : 1
Carousel Card : 2
Carousel Item
Carousel Card : 3
Carousel Card : 4
Carousel Card : 5
解决方案
他们思考问题的方式对您编写解决方案的方式有很大的影响。有多种方法可以考虑这个问题,每种方法都会导致不同的解决方案......以及不同的问题。当您提出的解决方案不起作用时,有时以不同的方式重新思考问题是有意义的。
您目前拥有的解决方案基本上是:
- 逐项浏览列表
- 在每第三项之后:
- 打印组头
- 打印项目
正如您所发现的,问题在于您从不打印第三组项目,因为它只有 2 个项目。'每第三个项目之后'就是原因。如果您的列表不是集合大小的整数倍,那么您永远不会显示最终集合。
你可以改变你的思维方式,或者只是在那里添加一个额外的条件。除了“每第三个项目之后”,您还可以添加一个检查以查看您是否已到达列表的末尾。这样在最后一项上输出部分集。
以下是解决此问题的其他几种方法:
- 打印页眉。显示 3 个项目。重复直到你的项目用完。
- 按 3 计数,显示范围内的可用项目
- 从一个数组(或 Enumerable)开始工作,将其分成适当大小的组并处理这些组。
其中每一个都有您必须解决的问题。
有许多其他方法可以考虑这个问题,每种方法都有自己的解决方案。
只是为了它,我为第三种方法拼凑了一个愚蠢的、通用的 LINQ 解决方案。这是一个建议,它只是当您尝试从不同的角度看待问题时可以提出的一种示例。
void PrintCarousel<T>(IEnumerable<T> source, Action<T> printer)
{
var groups = source.Select((item, index) => (item, index)).GroupBy(r => r.index / 3, r => r.item);
foreach (var group in groups)
{
Console.WriteLine("Carousel Item");
foreach (var item in group)
printer(item);
}
}
并用它来打印你的 8 个数字:
PrintCarousel(Enumerable.Range(0, 8), i => Console.WriteLine($"Carousel Card : {i}"));
由于几个原因,这是一个愚蠢的解决方案。它对你正在做的事情来说是不必要的复杂,它在内存和代码方面很昂贵,它是通用的,而不需要......而且它有点丑陋。
虽然有效。
推荐阅读
- precision - ALU,双精度和整数
- amazon-web-services - 如何从 CloudFormation 模板内的 CodeBuild 资源创建 json 文件工件?
- python-3.x - 请求者发出跳过歌曲的问题
- node.js - 如何进行有条件的 https 请求?
- sql - 查看 PL SQL 中的 IF、WHERE 和 WHEN
- jquery - 弹出表单返回 404 而不是更新 DataTables 行
- javascript - JQuery 不删除类
- python - 在 numpy 中向量化这个 for 循环
- c# - 输入无效输入时,Tryparse 未使用 else 语句
- r - 在保持列完整性的同时使用 unlist