首页 > 解决方案 > 如何在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

标签: c#asp.netasp.net-mvc

解决方案


他们思考问题的方式对您编写解决方案的方式有很大的影响。有多种方法可以考虑这个问题,每种方法都会导致不同的解决方案......以及不同的问题。当您提出的解决方案不起作用时,有时以不同的方式重新思考问题是有意义的。

您目前拥有的解决方案基本上是:

  • 逐项浏览列表
  • 在每第三项之后:
    • 打印组头
    • 打印项目

正如您所发现的,问题在于您从不打印第三组项目,因为它只有 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}"));

由于几个原因,这是一个愚蠢的解决方案。它对你正在做的事情来说是不必要的复杂,它在内存和代码方面很昂贵,它是通用的,而不需要......而且它有点丑陋。

虽然有效。


推荐阅读