懒惰列表克隆

时间:2012-10-17 07:39:46

标签: c# list copy clone lazy-evaluation

我有一个包含大量元素的List。我需要创建此列表的副本以对其执行操作而不更改原始列表。但是,操作通常只访问列表中的一小部分元素,因此当大部分元素未被使用时复制整个元素是低效的。有没有一种简单的方法来创建一个列表的克隆对象,但只在访问它们时克隆元素?我查看了Lazy<T>类,这似乎是我想要的,但我不知道如何应用它。

我希望能够做到这样的事情:

LazyListCopy<SomeType> lazyCopy = LazyListCopy.Copy(myList); // No elements have been copied at this point
DoSomethingWith(lazyCopy[34]);                               // 35th element has now been copied

而且:

foreach(SomeType listElement in LazyCopy.Copy(myOtherList))
{
    if (!Check(listElement))   // Object corresponding to listElement has been cloned
        break;
}

我不介意解决方案是否不够通用,无法处理任何类型的列表;我会很好,因为它特定于我创建的一两个类。

最好是深拷贝而不是浅拷贝,但浅拷贝仍然有用,如果它更短/更简单,我会很感激。

1 个答案:

答案 0 :(得分:4)

听起来你想要以原始列表加上稀疏的覆盖集合结束。

为什么不为重写创建一个字典,将索引键入原始列表?然后,您可以根据需要手动添加原始列表中的值。

如果你经常使用它,你可以将这个功能包装到一个包装IList<T>的类中。