当前位置: 首页 > 面试题库 >

确定每个使用时的最后一个循环

潘涵煦
2023-03-14
问题内容

在对象上执行“ 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 i in 1..list.length',但是for每个解决方案都感觉更优雅。在循环中编码特殊情况的最优雅方式是什么?可以用foreach完成吗?


问题答案:

如何先获取对 最后一项*引用 ,然后在foreach循环中将其用于比较呢?
我并不是说您应该这样做,因为我自己会使用KlauseMeier提到的基于索引的循环
。抱歉,我不了解Ruby,因此以下示例在C#中!希望你不要介意:-)

***

string lastItem = list[list.Count - 1];
foreach (string item in list) {
    if (item != lastItem)
        Console.WriteLine("Looping: " + item);
    else    Console.Writeline("Lastone: " + item);
}

我修改了以下代码,以按引用而非值进行比较(只能使用引用类型而不是值类型)。以下代码应支持包含相同字符串(但不是相同字符串对象)的多个对象,因为MattChurcy的示例未指定字符串必须是不同的,并且我使用LINQ
Last方法而不是计算索引。

string lastItem = list.Last();
foreach (string item in list) {
    if (!object.ReferenceEquals(item, lastItem))
        Console.WriteLine("Looping: " + item);
    else        Console.WriteLine("Lastone: " + item);
}

以上代码的局限性。(1)它仅适用于字符串或引用类型,不适用于值类型。(2)同一对象只能在列表中出现一次。您可以具有包含相同内容的不同对象。文字字符串不能重复使用,因为C#不会为内容相同的字符串创建唯一的对象。

而且我也不傻。我知道基于索引的循环是一个可以使用的循环。我第一次发布初始答案时已经说过了。我在所提供的最好的答案我能 方面
的问题。我太累了,无法继续解释这一点,所以你们所有人都可以投票删除我的答案。如果这个消失了,我会很高兴。谢谢



 类似资料:
  • 问题内容: 问题很简单。我的代码中有一个循环: 在此循环中,当我们处于第一次或最后一次迭代时,我想做出不同的反应。 这个怎么做? 问题答案: 您可以使用一个计数器:

  • 问题内容: 我正在使用一个while循环来遍历游标,然后输出数据库中每个点的经度和纬度值。 由于某种原因,它不会返回游标中的最后一组(或第一个,取决于我是否使用Cursor.MoveToLast)经度和纬度值。 这是我的代码: 由此我得到: 04-02 15:39:07.416:INFO / System.out(10551):3.0 04-02 15:39:07.416:INFO / Syste

  • 问题内容: 我正在使用一些参数编写SQL查询创建器。在Java中,仅通过检查当前数组位置和数组长度,就可以很容易地从for循环中检测数组的最后一个元素。 在PHP中,它们具有用于访问数组的非整数索引。因此,您必须使用foreach循环遍历数组。当您需要做出一些决定时(在我的情况下,在构建查询时附加或/和参数),这将成为问题。 我确信必须有一些标准的方法来做到这一点。 您如何在PHP中解决此问题?

  • 问题内容: 学生的姓名(String [])和相应的标记(int [])存储在不同的数组中。 如何使用Java中的每个循环一起遍历两个数组? 一种简单的方法是在同一循环中使用索引变量。有什么好办法吗? 问题答案: 潜在的问题实际上是您应该将两个数组绑定在一起,并且仅跨一个数组进行迭代。 这是一个非常简单的演示-您应该使用getter和setter,还应该使用a 而不是数组,但这证明了这一点:

  • 我的程序中有一个错误,使我的循环只读取输入字符串的最后一部分。我想让程序计算一个字符串中每个字符的个数。我不想要答案告诉我如何更有效地存储这些值,而不重复所有内容26次。请回答我在这里提出的问题。抱歉,如果这是一个副本!我只是不知道该说明什么,因为没有明显的错误。

  • 我需要一点帮助来查找字符串中最后一个大写字符的最后一个索引 我一直在使用regex这样做。 它怎么会一直返回-1而不是B的索引7 代码突出显示在下面 有没有人对如何解决这个问题有什么建议?