获取列表索引的列表操作

本文关键字:列表 操作 索引 获取 | 更新日期: 2023-09-27 18:31:28

我的Windows应用程序中有一个类,如下所示:

public class Pets
{
  String Name {get;set;}
  int Amount {get;set;}
}

在我的其他一堂课上,我像这样列出了该类。

List<Pets> myPets = new List<Pets>();
myPets.Add(new Pets{ Name = "Fish", Amount = 8});
myPets.Add(new Pets{ Name = "Dogs", Amount = 2});
myPets.Add(new Pets{ Name = "Cats", Amount = 2});

有没有办法获得Name = "Fish" Pets的索引?

我意识到我可以做到这一点

int pos = 0;
for(int x = 0; x<myPets.Count;x++)
{
    if( myPets[x].Name == "Fish")
    {
        pos = x;
    }
}

但是如果我myPets有很多物品,则需要很长时间才能遍历它们才能找到我正在寻找的物品。有没有其他方法可以完成上述任务。这会让我的应用程序运行得更快吗?如果myPets里面有很多项目。

获取列表索引的列表操作

如果列表很大,您目前构建数据的方式不适合按宠物的名字进行搜索。

因此,按照您的建议手动迭代以及FindIndex正在做的事情被称为线性搜索,这是一种蛮力算法。如果集合中有 N 个项,则查找项的最坏情况是 N 次迭代。这被称为O(N),使用大O表示法。搜索速度随集合中的项目数线性增长。

为了更快地搜索,您需要更改为不同的数据结构(如哈希表),使用数据库或实现不同的搜索算法,例如二叉搜索(O(log(n)) complexity)。

以这个问题为例:LINQ 是否可以在订购集合时使用二叉搜索?

如果您只想查找索引以访问列表的项目,则可以改用字典。

var pets = new Dictionary<string, int>();
pets.Add("Dogs", 2);
pets.Add("Fish", 8);
int amount = pets["Fish"];