【问题标题】:foreach inversly反向 foreach
【发布时间】:2011-07-03 17:28:37
【问题描述】:

有没有可能的方法让 foreach 从结束到开始遍历集合?

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
    foreach (int i in fibarray)
    {
        System.Console.WriteLine(i);
    }

如何用foreach反向显示?

【问题讨论】:

  • 顺便说一句,正确的斐波那契序列是 0、1、1、2...

标签: c# loops foreach


【解决方案1】:
using System.Linq;

foreach (int i in fibArray.Reverse())

但是普通的for循环会更高效:

for( int index = fibArray.Length - 1; index >= 0; --index ) {
    int i = fibArray[index];
    ...
}

【讨论】:

    【解决方案2】:

    你可以使用Reverse():

    int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
    foreach (int i in fibarray.Reverse())
    {
        System.Console.WriteLine(i);
    }
    

    一般foreach 必须支持任何仅支持向前枚举集合中项目的IEnumerable,作为Reverse() 的替代方案,您可以编写自己的优化实现,该实现适用于提供索引器的IList .

    【讨论】:

      【解决方案3】:
      foreach (int i in fibarray.Reverse<int>())
      {
          System.Console.WriteLine(i);
      }
      

      【讨论】:

        【解决方案4】:

        不。请改用for,或在迭代之前将您的集合修改为所需的顺序。

        【讨论】:

          【解决方案5】:

          Enumerable.Reverse()

          foreach (int i in fibarray.Reverse)
              System.Console.Writeline(i);
          

          【讨论】:

            【解决方案6】:

            我认为默认情况下这是不可能的。您需要使用具有该功能的迭代器创建自己的类:

            C# .NET Iterator Example : Reverse Iteration

            【讨论】:

              【解决方案7】:

              简而言之,没有。你不能改变 foreach 的行为。如果您想在不返回新数组的情况下执行此操作(例如调用 Reverse),请使用 for 循环。

              int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
              for (int i = fibarray.Length - 1; i > -1; i--) {
                  Console.WriteLine(i);
              }
              

              【讨论】:

              • 您将i 的含义更改为索引,而不是数组内容。而且你有一个错误。
              • 虽然我错过了 -1 (doh),但 i-- 的功能在这种情况下提供了与 --i 相同的结果。
              • 这就是我所指的那种。现在您只需要实际打印fibarray 的内容,因为您将i 的含义从元素值 更改为`*index*。
              • 这是一个关于如何反转 for 循环的示例。他可以在循环内做任何他想做的事情,所以我真的不明白你想要说明什么。跨度>
              • BTW Reverse 不会返回一个新数组,它会返回一个向后遍历数组的迭代器。只对我怀疑的非常大的数组很重要。
              猜你喜欢
              • 2012-03-09
              • 1970-01-01
              • 2013-07-17
              • 1970-01-01
              • 1970-01-01
              • 2017-08-18
              • 2017-03-17
              • 2018-02-02
              • 2018-11-07
              相关资源
              最近更新 更多