コレクションから n 個の要素を削除し、削除された n 個の要素を既存の別のコレクションに追加する最もパフォーマンスの高い方法は何ですか?
現在、私はこれを持っています:
var entries = collection.Take(5).ToList();
foreach(var entry in entries)
collection.Remove(entry);
otherCollection.AddRange(entries);
ただし、これは私にはまったくパフォーマンスが良くないように見えます( 1つだけではなく複数の線形アルゴリズム)。
もちろん、次の要件が満たされている限り、考えられる解決策はコレクションの実装を変更する可能性があります。
otherCollection
を実装する必要IEnumerable<T>
があります。現在のタイプですList<T>
collection
を実装する必要ICollection<T>
があります。現在のタイプですLinkedList<T>
ヒント: エントリは必ずしもEquals()
orを実装するとは限りませんGetHashCode()
。
目標を達成するための最も効果的な方法は何ですか?
私のパフォーマンスに関する考慮事項を理解するのは明らかに難しすぎたので、ここでもう一度コード例を示します。
var entries = collection.Take(1000).ToList(); // 1000 steps
foreach(var entry in entries) // 1000 * 1 steps (as Remove finds the element always immediately at the beginning)
collection.Remove(entry);
otherCollection.AddRange(entries); // another 1000 steps
= 合計 3000 ステップ => 1000 ステップに減らしたい。