【问题标题】:Know when first and last loop in foreach知道 foreach 中第一个和最后一个循环的时间
【发布时间】:2014-09-10 21:56:30
【问题描述】:

有没有办法知道我何时处于 foreach 的第一个和最后一个循环?

foreach(string str in list){
  if(str.isFirst(list) == true){...} 
  if(str.isLast(list) == true){...} 
}

^ 是这样的吗?

【问题讨论】:

  • 我会为此使用索引 for 循环。
  • A foreach 只知道当前项目。顺便说一句,已经有非常相似的问题,例如stackoverflow.com/questions/4717120/…
  • 正如@TimSchmelter 在answer 之后建议的那样,为IEnumerable<T> 展示了非常好的“最后”实现,可以很容易地适应“第一”。在实施时,请确保为 0 和 1 案例定义您想要的行为。

标签: c#


【解决方案1】:
for (int i = 0; i < list.Length; i++)
{
    if (i == 0) 
    { 
        // is first iteration 
    }
    if (i >= list.Length - 1) 
    { 
        // is last iteration 
    }
}

【讨论】:

  • 哦,好吧,猜对了
【解决方案2】:

使用计数器

int i = 0;
foreach(string str in list)
{
   if(i == 0) { /* first */ }
   if(i == list.Count - 1)  { /* last */ }
   i++;
}

【讨论】:

  • 是的,那行得通。但如果你要维护计数器,你不妨只使用for 循环。
  • 问题的措辞方式,这可能是迄今为止提出的最佳解决方案,尽管标准的for 循环确实更有意义。
【解决方案3】:

检查您是处理第一项还是最后一项的最简单方法是以下代码:

void Process(string[] strings)
{
    for (int i = 0; i < strings.Length; i++)
    {
        var s = strings[i];

        bool isFirst = i == 0;
        bool isLast = i == strings.Length - 1;
    }
}

【讨论】:

    【解决方案4】:

    另一种方式

    foreach(var kv in list.ToDictionary(k => list.IndexOf(k), v => v))
    {
        if (kv.Key == 0) Console.WriteLine("First is {0}", kv.Value);
        if (kv.Key == list.Count - 1) Console.WriteLine("Last is {0}", kv.Value);
    }
    

    无论如何,最好的选择是 for() 循环

    【讨论】:

      【解决方案5】:
      bool first = true;    
      foreach(string str in list)
      {
        if(first) 
        {
            //do something
            first = false;
        } 
      }
      

      【讨论】:

      • 回答了一半。
      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 2020-07-12
      • 1970-01-01
      • 2016-02-22
      • 2011-11-13
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多