はい、これはLINQで実行できますが、最も効率的ではない場合があります。
var newArray = oldList.Take(1)
.Concat(oldList.Skip(3).Take(4))
.Concat(oldList.Skip(1).Take(2))
.ToArray();
ただし、元のコンテナがaのList<T>
場合は、もう少し効率的に作業を行うことができます。
var newList = oldList.GetRange(0, 1)
.Concat(oldList.GetRange(3, 4))
.Concat(oldList.GetRange(1, 2))
.ToList();
更新:
キックとニヤリのために、私は先に進んで、提案された方法のいくつかの時間を計りました、そしてそれは@LBがGet/Add/RemoveRange()
一番上に来るように見えます:
100,000回以上の反復:
- Skip()/ Take()は82ミリ秒かかりました(0.00082ミリ秒/呼び出し)
- GetRange()/ Concat()は69ミリ秒かかりました(0.00069ミリ秒/呼び出し)
- OrderBy()/ ThenBy()は145ミリ秒かかりました(0.00145ミリ秒/呼び出し)
- Add / Get / RemoveRange()には21ミリ秒かかりました(0.00021ミリ秒/呼び出し)
もちろん、ここではマイクロ最適化に取り組んでいるので、あなたにとって最も意味があり、最も保守しやすいものを使用すると思います。しかし、LBのソリューションが最もパフォーマンスが高いように見えます(そして読みやすいです)。