标识每个循环时使用的最后一个循环

2022-08-31 20:42:10

我想在对对象执行“foreach”时,对最后一个循环迭代做一些不同的事情。我正在使用Ruby,但C#,Java等也是如此。

  list = ['A','B','C']
  list.each{|i|
    puts "Looping: "+i # if not last loop iteration
    puts "Last one: "+i # if last loop iteration
  }

所需的输出等效于:

  Looping: 'A'
  Looping: 'B'
  Last one: 'C'

显而易见的解决方法是使用 将代码迁移到 for 循环,但 for 每个解决方案感觉更优雅。在循环期间编写特殊情况的最优雅方法是什么?它能用前叉来完成吗?'for i in 1..list.length'


答案 1

我在这里看到很多复杂的,几乎不可读的代码......为什么不保持简单:

var count = list.Length;

foreach(var item in list)
    if (--count > 0)
        Console.WriteLine("Looping: " + item);
    else
        Console.Writeline("Lastone: " + item);

这只是一个额外的声明!

另一种常见情况是,您希望对最后一项执行一些额外或较少操作,例如在项之间放置分隔符:

var count = list.Length;

foreach(var item in list)
{
    Console.Write(item);
    if (--count > 0)
        Console.Write(",");
}

答案 2

foreach 构造(在 Java 中肯定如此,可能在其他语言中也是如此)旨在表示最通用的 if 迭代类型,其中包括对没有有意义的迭代顺序的集合的迭代。例如,基于哈希的集合没有排序,因此没有“最后个元素”。每次迭代时,最后一次迭代可能会生成不同的元素。

基本上:不,foreach结构并不意味着以这种方式使用。


推荐