[過去ログ] ふらっと C#,C♯,C#(初心者用) Part154 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
48
(2): デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 11:27:38.32 ID:Dq7cA1DN0(1/3) AAS
それだけのために一時バッファとしてもう一個リスト作るのはスマートじゃない
Remove&先頭挿入をペアで行う場合は後方の順番は狂わないので原始的にforで回せばいい

for (int i = 0, end = obj_list.Count; i < end; ++i) {
var obj = obj_list[i];
if (obj.Name != "P") continue;
obj_list.RemoveAt(i);
obj_list.Insert(0, obj);
}
49: デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 11:38:43.21 ID:Dq7cA1DN0(2/3) AAS
>>48
そういえばint i = 1からでよかったな
54: デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 13:31:44.32 ID:Dq7cA1DN0(3/3) AAS
>>50
50(1): デフォルトの名無しさん (ワッチョイ 8a01-k1AF) [sage] 2022/03/01(火) 12:59:14.06 ID:haFp+aqn0(1) AAS
>>48
RemoveAtもInsertもO(n)だから
そのやり方なら新規にリストを作るほういいんじゃない?
要素数がめちゃくちゃ多い場合はそうだな
RemoveAtで発生する後方要素の前方詰めが今回は完全に不要だから一回分多く無駄な処理が挟まってるからな
.NET5以上ならCollectionsMarshal.AsSpanを利用して
obj_span.Slice(0, i).CopyTo(obj_span.Slice(1, i));
obj_span[0] = obj;
とかに変えればO(n)処理は1回だけで済むからどんなパターンでも新規List作成より早く済むと思うが
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s