編集:これで例を変更しました。組み込みのものは何もありません。実際に書き込むには少し痛みがあります。あなたがそれを動かすケースを検討する必要があります「上に」、どこを「下に」移動しているかなどです。あなたはおそらくList<T>
の代わりに、あなたが特定のインデックスに挿入し、削除することができます配列を、使用することを検討すべきである
public void ShiftElement<T>(this T[] array, int oldIndex, int newIndex)
{
// TODO: Argument validation
if (oldIndex == newIndex)
{
return; // No-op
}
T tmp = array[oldIndex];
if (newIndex < oldIndex)
{
// Need to move part of the array "up" to make room
Array.Copy(array, newIndex, array, newIndex + 1, oldIndex - newIndex);
}
else
{
// Need to move part of the array "down" to fill the gap
Array.Copy(array, oldIndex + 1, array, oldIndex, newIndex - oldIndex);
}
array[newIndex] = tmp;
}
...あなたはユニットテストをしたいと思いますが、私は、これはそれを行うべきだと思い。これらの2つの操作は、関連するセクションをコピーするだけの場合よりも高価になりますが、読みやすくなります。
「シフト」とは「スワップ」を意味しますか? –
duplicate of http://stackoverflow.com/questions/552731/c-good-best-implementation-of-swap-method – hatchet
いいえ、申し訳ありませんが、私の最初の例はちょっとばかげていましたが、例を少し明確にしました今。 –