2012-04-15 60 views
17

如何获取LinkedList实例的第n个元素?有没有内置的方式,或者我可能需要介绍我自己的实现?例如一个扩展方法?如何获得LinkedList中的第n个元素<T>?

谢谢

+1

首先,为什么?当然你需要一个链表? – alexn 2012-04-15 17:32:39

+0

我有一个InsertedSortList的例子,它在LinkedList数据结构上使用像InsertAt(int i)这样的方法。这就是我想问的原因。 – pencilCake 2012-04-15 17:52:41

+0

它是SO还是MSDN文档? – 2015-04-20 14:52:54

回答

27

ElementAt扩展方法将做到这一点:

// This is 0-based of course 
var value = linkedList.ElementAt(n); 

不要忘记这是一个O(n)的操作,因为LinkedList<T>不提供通过索引访问的任何项目更有效的方式。如果您需要定期执行此操作,则表明您不应该使用链接列表开始。

+8

微软,请在文档中添加复杂性:) – 2014-02-15 22:09:14

+0

@Jon不会被挑剔,但是如果我执行'IList ',是否需要索引操作不能是'O(n)'? – nawfal 2014-06-02 16:33:37

+1

@nawfal:将编辑。 – 2014-06-02 16:37:24

6

您可以使用ElementAt()枚举扩展方法。原因LinkedList不支持本地的随机访问是因为它对数据结构来说是一个相当低效的操作。如果你经常这样做,你应该考虑使用更合适的数据结构。

2

你可以使用LINQ来做到这一点,如list.ElementAt(n)list.Skip(n - 1).First(),但是如果你发现自己做链接列表的索引访问,你可能做错了事(链表不能有效地支持这个操作)。也许另一个数据结构会更合适?

0

我需要让我的列表的第二个元素(更新基于第二个第一项的值)

假设你正在采取必要步骤,以确保你有两个项目,你可以简单地这样做:

list.First.Next.Value 
相关问题