有没有可能使foreach从结尾向开头迭代集合?
int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in fibarray)
{
System.Console.WriteLine(i);
}
如何使用foreach反向显示?
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
。
using System.Linq;
foreach (int i in fibArray.Reverse())
但是普通的for循环将更加高效:
for( int index = fibArray.Length - 1; index >= 0; --index ) {
int i = fibArray[index];
...
}
foreach (int i in fibarray.Reverse<int>())
{
System.Console.WriteLine(i);
}
int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
for (int i = fibarray.Length - 1; i > -1; i--) {
Console.WriteLine(i);
}
fibarray
的内容,因为你已经将i
的含义从元素值更改为了*索引*
。 - Ben VoigtReverse
不会返回一个新的数组,而是返回一个反向遍历该数组的迭代器。我认为这只对非常非常大的数组很重要。 - Ben Voigtfor
,或在迭代之前修改您的集合以达到所需的顺序。