当我想从列表中的最后一个元素迭代到第一个元素时,我通常会这样做:
For i=list.Count-1 to 0 Step -1 'do something Next
我想知道是否有办法使用For Each语句以这种方式迭代列表.
谢谢!
解决方法
这可以用
Enumerable.Reverse完成.如果列表被输入为IEnumerable,你可以像这样调用它:
For Each item in list.Reverse() Next
但是,如果它是ArrayList或List(Of T),这将调用修改列表的Reverse方法(并且不返回任何内容).在这种情况下,您可以直接从Enumerable调用或使用AsEnumerable:
For Each item in Enumerable.Reverse(list) Next For Each item in list.AsEnumerable().Reverse() Next
需要注意的是,此方法会将列表复制到数组中.如果需要节省内存,最好使用For … To方法.您可以将其包装到您自己的iterator功能extension method中:
<Extension()> Public Iterator Function LazyReverse(Of T)(source As IList(Of T)) As IEnumerable(Of T) For i = source.Count - 1 To 0 Step -1 Yield source.Item(i) Next End Function
然后随时打电话给:
For Each item in list.LazyReverse() Next
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。