查找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()的等效函数
在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>
,请考虑编写自己的函数并降低性能。
对