2

大量の要素を含むリストがあります。元のリストを変更せずに操作を実行するには、このリストのコピーを作成する必要があります。ただし、操作は通常、リストの要素のごく一部にしかアクセスしないため、ほとんどが使用されない場合に全体をコピーするのは非効率的です。リストのクローンであるオブジェクトを作成する簡単な方法はありますが、アクセスされたときに要素をクローンするだけですか? 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 つまたは 2 つのクラスに固有のものであれば問題ありません。

これは、浅いコピーではなく深いコピーであることが望ましいですが、浅いコピーは依然として有用であり、それがより短く/より単純である場合、その例をいただければ幸いです。

4

1 に答える 1

4

元のリストに加えて、オーバーライドのまばらなコレクションで終わりたいと思うように聞こえます。

元のリストのインデックスをキーにして、上書き用の辞書を作成してみませんか? その後、必要に応じて元のリストから値を手動で追加できます。

この機能を頻繁に使用する場合は、ラップするクラスにラップIList<T>することができます。

于 2012-10-17T07:57:26.590 に答える