查找LinkedList中元素的索引

本文关键字:索引 元素 LinkedList 查找 | 更新日期: 2023-09-27 17:53:58

假设我有一个LinkedList<并且每个Client对象都有一个ID属性。我想根据他们在LinkedList中的索引设置每个客户的ID。>

在Java中,我以前是这样做的

 for (Client i : clientList)
 {              
    i.setClientId(clientList.indexOf(i));
 }

我在c#中找不到indexOf()的等效函数

查找LinkedList中元素的索引

在Java中,我以前是这样做的[…]

这是一个缓慢的选项:操作需要O(n2),因为您对clientList的每个元素执行线性搜索。一个更好的选择是在循环外保留一个整数索引:

int lastId = 0;
for (Client i : clientList) {              
    i.setClientId(lastId++);
}

我似乎找不到c#中indexOf()的等效函数

那很好,因为你可以使用一个更好的选项:

var lastId = 0;
foreach (var c in clientList) {
    c.ClientId = lastId++;
}

不带局部变量的选项更复杂,但这里是:

foreach (var p in clientList.Select((c, i) => new {Client=c, Index=i})) {
    p.Client.ClientId = p.Index;
}

尝试:

int i = 0;
foreach( Client c in clients){
   c.Id = i++;
}

IndexOf不存在于LinkedList中,它是一个链接结构。

查找元素的索引意味着将所搜索的元素与所有元素进行比较。这将是非常低效的。

如果不能运行循环,首选List<Client>而不是LinkedList<T>

如果您需要使用LinkedList<T>,请考虑编写自己的函数并降低性能。