C# 在LinkedList C中查找元素的索引#

C# 在LinkedList C中查找元素的索引#,c#,C#,假设我有一个LinkedList,每个客户端对象都有一个ID属性。我想根据LinkedList中的索引设置每个客户端的ID 在Java中,我经常这样做 for (Client i : clientList) { i.setClientId(clientList.indexOf(i)); } 我似乎在C#中找不到与indexOf()等价的函数,请尝试: int i = 0; foreach( Client c in clients){ c.Id =

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

在Java中,我经常这样做

 for (Client i : clientList)
 {              
    i.setClientId(clientList.indexOf(i));
 }
我似乎在C#

中找不到与indexOf()等价的函数,请尝试:

int i = 0;
foreach( Client c in clients){
   c.Id = i++;
}
IndexOf
LinkedList
中不存在-它是一个链接结构

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

如果无法运行循环,请选择
List
而不是
LinkedList

如果您需要使用<代码> LIKEDLIST/COD>,请考虑编写自己的函数并具有较低的性能。

关于

请尝试:

int i = 0;
foreach( Client c in clients){
   c.Id = i++;
}
IndexOf
LinkedList
中不存在-它是一个链接结构

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

如果无法运行循环,请选择
List
而不是
LinkedList

如果您需要使用<代码> LIKEDLIST/COD>,请考虑编写自己的函数并具有较低的性能。

问候

在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;
}
在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;
}

在Java中,我曾经这样做[…]。。。没有看到任何有疑问的文本?@Rahul
[…]
指定从引用中剪辑的文本。其他一切都是问题的复制/粘贴,包括
i
i
打字错误。谢谢,我没有意识到O的复杂性。在Java中,我过去常常这样做[…]。。。没有看到任何有疑问的文本?@Rahul
[…]
指定从引用中剪辑的文本。其他一切都是问题的复制/粘贴,包括
i
i
打字错误。谢谢,我没有意识到O的复杂性。我想最大的问题是,你为什么要使用链表?您可能会发现另一个系列更适合您的需要。还有,为什么要用列表中的索引标识客户机?这似乎不是一件合乎逻辑的事情。我使用链表集合主要是出于对其他集合的忽略,因为我主要想要的是一个非静态长度的对象数组。我想把索引传递给客户端对象,因为我想知道哪个是先存储的,哪个是第二存储的,等等,因为我想把它们有序地呈现给用户界面,用户可以在那里更改索引,如果他愿意的话。在使用它之前,你应该用谷歌搜索集合类型的概述,并选择一个适合你需要的。LinkedList就是它,它的链接方式是->第一个对象指向下一个对象,下一个指向下一个对象。您为此选择了最差的列表,因为该列表不知道对象在哪里-LinkedList对象中的每个节点都属于LinkedListNode类型。因为LinkedList是双重链接的,所以每个节点都指向下一个节点,并向后指向上一个节点。我认为最大的问题是,为什么要使用链接列表?您可能会发现另一个系列更适合您的需要。还有,为什么要用列表中的索引标识客户机?这似乎不是一件合乎逻辑的事情。我使用链表集合主要是出于对其他集合的忽略,因为我主要想要的是一个非静态长度的对象数组。我想把索引传递给客户端对象,因为我想知道哪个是先存储的,哪个是第二存储的,等等,因为我想把它们有序地呈现给用户界面,用户可以在那里更改索引,如果他愿意的话。在使用它之前,你应该用谷歌搜索集合类型的概述,并选择一个适合你需要的。LinkedList就是它,它的链接方式是->第一个对象指向下一个对象,下一个指向下一个对象。您为此选择了最差的列表,因为该列表不知道对象在哪里-LinkedList对象中的每个节点都属于LinkedListNode类型。因为LinkedList是双链接的,所以每个节点都指向前一个节点,并指向前一个节点。