首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何以相反的顺序迭代.Net IList集合?

在.Net中,IList<T>是C#的一个集合类型,它提供了一组操作以实现对T类型元素的添加、移除、查找等功能。在编程中,我们通常需要一个有序的、可枚举的元素集合,并且支持插入、更新、删除等操作。这种需求可以通过一个 IList<T> 集合来实现。但是,在很多时候我们也需要一个相反顺序的IList<T>集合,以便按照相反的顺序遍历集合中的元素。

那么如何以相反的顺序迭代.Net IList集合呢?

为了以相反的顺序迭代.Net IList集合,可以使用迭代器方法 List<T>.Reverse() 或将IList集合本身传递到一个方法中,例如,使用 LINQ:

代码语言:txt
复制
class Program
{
    static void Main(string[] args)
    {
        IList<int> list = new List<int> { 1, 2, 3, 4, 5, 6 };
        ReverseOrderList(list);
        foreach (int item in list)
        {
            Console.WriteLine(item);
        }
    }

    static void ReverseOrderList(IList<int> list)
    {
        int cnt = list.Count;
        int i = 0;
        int j = cnt - 1;
        while (i < j)
        {
            Console.WriteLine(list[i]);
            int temp = list[i];
            list[i] = list[j];
            list[j] = temp;
            i++;
            j--;
        }
    }
}

需要注意的是,当我们迭代IList集合时,如果元素的顺序很重要,那我们需要注意集合的创建方式。如果我们只使用了Reverse() 方法,元素在创建时的顺序就会影响到后续迭代时的顺序。因此最好直接使用一个已经按照我们要的顺序排布好的IList列表作为参数。

总之,.Net IList集合提供了很多方法以按照不同的顺序遍历元素。使用 List<T>.Reverse() 或将IList集合本身传递到一个方法中,然后按照相反的顺序遍历集合就可以了。不过需要注意的是,在使用时务必要确保集合已经在创建时就按照正确的顺序排布好了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET泛型集合

引用类型数组通常是协变Stream[]引用可以隐式转换为Object[],并且存在显式反向转换(容易混淆是,也可以将Stream[]隐式转换为IList,尽管IList本身是不变)。...LinkedList在很多方面都是一个列表,特别的,它是一个保持项添加顺序集合——但它却没有实现IList。因为它无法遵从通过索引进行访问隐式契约。...对队列进行迭代时,产生顺序与出队时一致。...对栈进行迭代时,产生顺序与出栈时一致——即最近添加值将率先返回。...此外,IReadOnlyList协变性意味着它不能暴露任何以T为参数方法,Contains和IndexOf。其最大好处在于它暴露了一个索引器,通过索引来获取项。

16720

C#中如何使用Parallel.For和Parallel.ForEach

相反,如果两个任务同时执行,则两个任务并行执行。为了实现任务并行性,程序必须在具有多个内核CPU上运行。....NET Core中Parallel.For和Parallel.ForEach Parallel.For循环执行可能并行运行迭代。您可以监视甚至操纵循环状态。...Parallel.For循环类似于for循环,不同之处在于它允许迭代在多个线程中并行运行。 Parallel.ForEach方法将要完成工作分成多个任务,每个任务用于集合每个项目。....NET并发集合包含在System.Collections.Concurrent命名空间内,并提供了该集合无锁和线程安全实现。...您所见,因为我们使用了Parallel.ForEach,所以已经创建了多个线程,因此托管线程ID是不同

5.8K20

.NET面试题系列 - IEnumerable派生类

Stack 当需要使用后进先出顺序(LIFO)数据结构时,.NET为我们提供了Stack。Stack 类提供了Push和Pop方法来实现对Stack存取。...Queue 当我们需要使用先进先出顺序(FIFO)数据结构时,.NET 为我们提供了Queue。Queue类提供了Enqueue和Dequeue方法来实现对Queue存取。...部分泛型集合继承此接口 提供索引器 List 索引器 IList 继承了Ilist(以及其他接口) ArrayList泛型版本 最常用泛型集合 如果不需要很强功能,可以考虑用...集合(保存一组唯一值/模拟集合运算): Hash table based set (HashSet):当需要保存一组唯一值,并且元素没有特定顺序时。...它赋予集合迭代能力。迭代是指从集合头部,一个一个将元素拿出来,直到全部拿完为止操作。迭代不能倒车,只能前进。IEnumerable是迭代器模式实现。

1.7K20

快速入门系列--CLR--03泛型集合

.NET泛型集合 在这里主要介绍常见泛型集合,很多时候其并发时线程安全性常常令我们担忧。因而简述下.NET并发时线程安全特性,其详情请见MSDN。...普通集合都不支持多重并发写操作 部分支持单线程写和并发读操作 同时.NET4添加了大量并发集合 首先介绍常见泛型集合接口,其大部分都位于System.Collection.Generic...IList,提供定位功能,包括一个索引器、Insert和RemoveAt,我们通常认为可以通过索引对该泛型集合进行随机访问。...HashSet,是不含值Dictionary,具有相同性能特性,并且所维护顺序一般与添加顺序无关。...,其GetEnumerator()方法返回集合快照,迭代时可以改变集合,但该改变不会反应到迭代器中。

74370

【C++100问】深度总结STL基本容器使用

文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever 由于微信不允许外部链接,你需要点击页尾左下角“阅读原文”,才能访问文中链接。...迭代器(Iterators):用来在一个对象集合元素上进行遍历动作。这个对象集合或许是个容器,或许是容器一部分,每种容器都提供了了解该种容器内部结构迭代器。...关联容器(Associative containers),支持高效关键字查找和访问操作。关联容器中各元素间没有严格物理顺序,取决于特定排序准则以及元素值,和插入次序无关,元素是有序集合。...其中,STL 提供 最常用: 四个 顺序容器: 向量(vector); 双端队列(deque); 列表(list); 字符串(string); 四个 关联容器: 集合(set);多重集合(multiset...,然而事实上,通常情况是恰恰相反

1.1K31

【5min+】你怎么穿着品衣服?IEnumerable AND IEnumerator

系列介绍 简介 【五分钟dotnet】是一个利用您碎片化时间来学习和丰富.net知识博文系列。...它所包含了.net体系中可能会涉及到方方面面,比如C#小细节,AspnetCore,微服务中.net知识等等。 场景 您可以在下班坐地铁时候,拿出手机逛一逛博客园,利用短短五分钟完成阅读。...先来看看它们样子: ? ? IEnumerable说:我提供了公开枚举器,并且该枚举器支持在非泛型集合上进行简单迭代功能。 IEnumerator说:我提供了支持对非泛型集合进行简单迭代功能。...所以我们来想一下我们在.NET中经常用到迭代对象有哪些呢? 是的,你可能第一个就会想到List。...那我们就来查看IList接口继承关系: public interface IList : ICollection, IEnumerable 果不其然,它继承了IEnumerable接口。

37230

设计模式征途—21.迭代器(Iterator)模式

我们可以将电视机看做一个存储电视频道集合对象,通过遥控器可以对电视机中频道集合进行操作,例如返回上一个频道、跳转到下一个频道或者跳转到指定频道等。...在上图中,IList类型对象objects用于存储数据,AbstractObjectList类方法说明如下表所示: ?...因此,可以将遍历数据行为从聚合对象中分离出来,封装在一个被称为“迭代器”对象中,由迭代器来提供遍历聚合对象内部数据行为,这将简化聚合对象设计,更加符合单一职责原则。...(3)重点 => 该模式在.Net中,可以通过实现IEnumberable接口即可,不再需要单独实现!...(在.NET下,迭代器模式中聚集接口和迭代器接口都已经存在了,其中IEnumerator接口扮演就是迭代器角色,IEnumberable接口则扮演就是抽象聚集角色,其中定义了GetEnumerator

38520

再谈开发中代码规范

2.类中方法放置顺序,按照public,internal,protected,private这样顺序从上往下放置。并且public中把增删改方法放在最前,查询放在之后。...3.字段的确定性尽可能明确,且尽量按照如下顺序定义:const > readonly > 无 4.一个方法中尽量只做一件事,并且命名可以知道这个方法做了什么【方法命名配合类命名可以尽可能简洁】...7.生命周期:尽量缩短变量存活周期,不是必须使用尽量不要使用全局变量 8.变量跨度:变量声明定义开始到第一次使用该变量代码行之间行距尽可能短 9.在操作非托管对象(流操作)时候尽量使用using...声明为IList,调用者可传递实现了IList其他类型对象。     同理,有基类尽量使用基类。除非有特定原因。     相反,返回时候返回最强类型。...12.当一个方法参数数量大于5个时候,如果可能,声明一个单独类进行封装。 12.从数据库获取一个数据集合时,如果未获取到数据,那么返回一个空集合,不要返回null。

37640

c#数组简单知识补充

System.Collections.IList // 集合父基类,定义了返回元素数量,复制等一些集合类型最基本方法,同时提供了可以同步访问ICollection对象元素方法,数组具有这些能力 System.Collections.ICollection...// 定义迭代遍历能力,数组可以使用foreach循环 System.Collections.IEnumerable // .net4 新增接口,定义了排序能力,数据可以进行排序因此而来 System.Collections.IStructuralComparable...*/ System.Collections.Generic.IList // 提供泛型能力,也有基本增删改查功能 System.Collections.Generic.ICollection... // 一个类型可以使用linq迭代,必须实现改接口,因此数组可以使用linq查询。...这些动作是由CLR (公共语言运行时)执行,内部原理并不清楚,但一般而言linq查询是对集合进行操作,数组属于集合,但由于存在多维数组,数组不能直接实现IEnumerable泛型接口获取linq查询能力

14110

C#集合类型大揭秘

集合是.NET FCL(Framework Class Library)重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用集合类型,给我们撸码提供了极大便利。...我们可以将迭代器想象成数据库游标,即序列(集合)中某个位置,迭代器只能在序列(集合)中向前移动。...同一个序列(集合)可能同时存在多个迭代器操作,相当于同时对一个集合进行多个遍历。这种情况下可能会出现迭代彼此交错。那么如何解决呢?...IListIList IList接口直接继承于ICollection接口和IEnumerable接口,并且扩展了通过索引操作集合功能。...所以SortedList**适用于既需要快速查找又需要顺序排列但是添加和删除元素较少场景。

1.2K70

C#集合类型大揭秘

集合是.NET FCL(Framework Class Library)重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用集合类型,给我们撸码提供了极大便利。...我们可以将迭代器想象成数据库游标,即序列(集合)中某个位置,迭代器只能在序列(集合)中向前移动。...同一个序列(集合)可能同时存在多个迭代器操作,相当于同时对一个集合进行多个遍历。这种情况下可能会出现迭代彼此交错。那么如何解决呢?...IListIList ? IList接口直接继承于ICollection接口和IEnumerable接口,并且扩展了通过索引操作集合功能。...物极必反,Dictionary缺点也很明显,就是里面的数据是无序排列,所以按照一定顺序遍历查找数据效率是非常低

1.5K40

C#集合类型大盘点

C#集体类型( Collections in C#)   集合是.NET FCL(Framework Class Library)中很重要一部分,也是我们开发当中最常用到功能之一,几乎是无处不在。...IListIList   IList则是直接继承自ICollection和IEnumerable。所以它包括两者功能,并且支持根据下标访问和添加元素。...我们可以这样说,IEnumerable支持功能最少,只有遍历。而ICollection支持功能稍微多一点,不仅有遍历还有维护这个集合功能。而IList是最全版本。...现在基本上我们已经不使用这些集合类了,除非在做一些和老代码保持兼容工作时候。来看看1.0时代.NET程序员们都有哪些集合类可以用。 ArraryList 后来被List替代。...线程安全Dictionary BlockingCollection .NET为我们提供集合类是我们很常用工具类之一,希望这篇文章能够帮助大家更好认识这些集合类。

1K70

三十分钟掌握STL

译者:kary contact:karymay@163.net STL概述 STL一个重要特点是数据结构和算法分离。尽管这是个简单概念,但这种分离确实使得STL变得非常通用。...例如,当对一个集合对象排序时,如果你在不同结构中指定了两个迭代器,第二个迭代器无法从第一个迭代器抵达,此时程序注定要失败。这是STL灵活性一个代价。STL不保证检测毫无道理错误。...其他一些容器还使用rbegin()和 rend()方法提供反向迭代器,以按反向顺序指定对象范围。 下面的程序创建了一个矢量容器(STL和数组等价对象),并使用迭代器在其中搜索。...随机访问迭代器能够以任意顺序访问数据,并能用于读写数据(不是constC++指针也是随机访问迭代器)。...STL排序和搜索函数使用随机访问迭代器。随机访问迭代器可以使用关系操作符作比较。 random_shuffle() 函数随机打乱原先顺序

2.1K80

三十分钟掌握STL

2)           容器是一种数据结构,list,vector,和deques ,以模板类方法提供。为了访问容器中数据,可以使用由容器类输出迭代器。...例如,当对一个集合对象排序时,如果你在不同结构中指定了两个迭代器,第二个迭代器无法从第一个迭代器抵达,此时程序注定要失败。这是STL灵活性一个代价。STL不保证检测毫无道理错误。...其他一些容器还使用rbegin()和rend()方法提供反向迭代器,以按反向顺序指定对象范围。 下面的程序创建了一个矢量容器(STL和数组等价对象),并使用迭代器在其中搜索。...随机访问迭代器能够以任意顺序访问数据,并能用于读写数据(不是constC++指针也是随机访问迭代器)。...STL排序和搜索函数使用随机访问迭代器。随机访问迭代器可以使用关系操作符作比较。 random_shuffle() 函数随机打乱原先顺序

1.2K40

C++ Primer 第11章 泛型算法 学习总结

(起始,结束)–稳定排序,相等情况下,保持原始顺序 sort(起始,结束,谓词函数)–按照谓词函数规则排序 编写程序统计一个文档中长度不小于 4 单词,并输出输入序列中不重复单词。...word; while(infile >> word) words.push_back(word); sort(words.begin(),words.end()); //sort按照字典顺序排序...11.3.3 反向迭代器 反向遍历容器迭代器 ?...带有单个目标迭代算法 dest 形参是一个迭代器,用于指定存储输出数据目标对象。算法假定无论需要写入多少个元素都是安全。...这些算法包括 sort 及其相关算法。 还有一些其他泛型算法, merge、remove、reverse 和 unique,虽然可以用在 list 上,但却付出了性能上代价。

97110

数据结构与算法2016-06-03

(2)IEnumerable接口 IEnumerable接口公开枚举数,该枚举数支持再集合上进行简单迭代。 IEnumerable接口可由支持迭代内容对象类实现。...(3)IEnumerator接口 IEnumerator接口支持在集合上进行简单迭代。是所有枚举数基接口。枚举数只允许读取集合数据,枚举数无法用于修改基础集合。...(5)IDictionary接口 IDictionary接口是基于ICollection接口更专用接口。IDictionary接口实现是键值对集合Hashtable类。...(6)IList接口 IList接口实现是可被排序且可按照索引访问其成员结合,ArrayList类。...接口是完全抽象成员集合,不提供实现,类或者结构可以继承多个接口。接口最适合为不相关类提供通用功能。如果要设计小而简练功能块,则使用接口。

29420

C#语言各种集合介绍

Array集合类对应IEnumerator是 SZArrayEnumerator (这两个类在.net framework类库文档(msdn)中都没有介绍) 1.System.Colloctions...,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList...IList实现是可排序且可按照索引访问其成员集合,它本身实现了ICollection和IEnumerable接口 是所有列表抽象基类。...IList 实现有三种类别:只读、固定大小、可变大小。...IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 2.System.Collections中可以直接使用集合类有: 1)ArrayList 实现了接口:IList、ICollection

60421

在C++中反射调用.NET(三) 使用非泛型集合委托方法C++中列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++CLI

在.NET与C++之间传输集合数据 上一篇《在C++中反射调用.NET(二)》中,我们尝试了反射调用一个返回DTO对象.NET方法,今天来看看如何在.NET与C++之间传输集合数据。....NET 前面讲了从.NET反射调用获得一个集合,看起来比较容易,但是从C++反射调用时候传递一个集合就不容易了。...注意,这里传递还是.NET集合,所以这里需要做3件事情: 1,首先构建一个.NET集合对象; 2,转换C++本机结构数据到.NET集合元素; 3,反射调用.NET方法,传递数据过去。...一切准备就绪,下面可以通过以下步骤提交集合数据给.NET方法了: 1,反射.NET方法,获取参数泛型形参类型; 2,创建此泛型形参泛型List对象实例; 3,遍历C++集合(列表list),将结构数据赋值给动态创建实体类对象...所以如果你能够适当对要调用.NET方法进行封装,那么可采用使用弱类型集合传输数据方案,否则,就在C++/CLI端多写2行代码,使用强类型传输数据方案。

9K100
领券