获取通用列表中对象的索引

use*_*631 14 c# generics list

我有一个自定义对象列表,每次删除一个对象我需要知道它的索引时,有两个属性作为标识符(IDa,IDb).如何在不循环所有列表的情况下获取对象的索引?

List<CustomObject> list =new List<CustomObject>();
list.RemoveAll((MiniMapRecord p) => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);
Run Code Online (Sandbox Code Playgroud)

Mat*_*vey 20

你想要的方法是FindIndex(谓词)

int index = list.FindIndex(MiniMapRecord p => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);
Run Code Online (Sandbox Code Playgroud)

  • @ user437631:O(N) (2认同)

Jos*_*h G 8

正如其他人所说的那样,除非你做到以下情况,否则无法避免在项目中循环找到一个:

记住索引.创建列表时,将相关索引保存到成员变量.这可能不适合您的问题.

要么:

保持列表排序并对项目进行二进制搜索.这也可能不起作用,因为您有两个标识符.

IndexOf() 是一个简单的解决方案,但它将花费O(N)(线性).


dan*_*n78 6

您可以使用该IndexOf()方法获取您的给定元素的索引List<>.

但请注意,由于链接列表不允许随机访问,因此除了从头开始并一次检查一个元素之外,实际上没有任何其他方法可以找到特定元素(以及因此其索引).