查找LinkedList中的元素索引C#

时间:2016-06-30 16:29:49

标签: c#

假设我有一个LinkedList<客户机GT;每个Client对象都有一个ID属性。我想根据LinkedList中的索引设置每个客户端的ID。

在Java中,我曾经像这样做

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

我似乎无法在C#

中找到indexOf()的等效函数

2 个答案:

答案 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}},请考虑编写自己的功能并降低性能。

此致