假设我有一个LinkedList<客户机GT;每个Client对象都有一个ID属性。我想根据LinkedList中的索引设置每个客户端的ID。
在Java中,我曾经像这样做
for (Client i : clientList)
{
i.setClientId(clientList.indexOf(i));
}
我似乎无法在C#
中找到indexOf()的等效函数答案 0 :(得分:3)
在Java中,我曾经这样做[...]
这是一个慢选项:操作需要O(n 2 ),因为您对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;
}
答案 1 :(得分:1)
尝试:
IndexOf
LinkedList
中不存在 List<Client>
- 它是一个链接结构。
查找元素的索引意味着将搜索到的元素与所有元素进行比较。这将是非常低效的。
如果无法运行循环,请将LinkedList<T>
添加到LinkedList<T>
。
如果您需要使用{{1}},请考虑编写自己的功能并降低性能。
此致