如何拼接两个LinkedList <t>

时间:2017-10-06 22:01:37

标签: c# linked-list splice

我有List<bar> LinkedList<foo>

int x = y;
List<LinkedList<foo>> list = new List<LinkedList<foo>>(x);

我希望能够<{>>移动 LinkedList<foo> list LinkedList<foo>的所有元素,而无需创建新的列表或节点。这就是我选择list类型的原因。在C ++中,我可以使用std::list::splice

最后,只有LinkedList<foo>的一个元素不会为空。

我的问题是我无法找到这样做,我只找到将两个SELECT * FROM (SELECT *, row_number() OVER (PARTITION BY propertyid ORDER BY validfrom DESC) AS rownum FROM propertyvalue WHERE validfrom <= '1978-01-01T00:00:00Z') X WHERE rownum = 1; 复制到一个或类似的方法。

到目前为止我的研究(这不是我想要的):

注意:我不关心数据顺序,我只需要表现。

1 个答案:

答案 0 :(得分:2)

如果“我只是需要性能”,你的意思是你需要将拼接操作设置为O(1),那么据我所知,这对于.NET是不可能的。

但是,您可以创建自己的类型,其行为类似于LinkedList<T>,并支持此类拼接操作。当然,实现已经存在的功能并不好,但另一方面,链表并不复杂。

或者你可以创建一个包装List<LinkedList<T>>(或类似的东西)并支持你需要的操作的类型。例如。 LinkedList<T>实现IEnumerable<T>ICollection<T>,并且在List<LinkedList<T>>的包装上实现这些只是几行相对简单的代码,并且拼接操作几乎是免费的。