[過去ログ] ふらっと C#,C♯,C#(初心者用) Part154 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
54:  (ワッチョイ ca24-yy09) 2022/03/01(火)13:31 ID:Dq7cA1DN0(3/3) AAS
 >>50 
 要素数がめちゃくちゃ多い場合はそうだな 
 RemoveAtで発生する後方要素の前方詰めが今回は完全に不要だから一回分多く無駄な処理が挟まってるからな 
 .NET5以上ならCollectionsMarshal.AsSpanを利用して 
 obj_span.Slice(0, i).CopyTo(obj_span.Slice(1, i)); 
 obj_span[0] = obj; 
 とかに変えればO(n)処理は1回だけで済むからどんなパターンでも新規List作成より早く済むと思うが 
55(1):  (アウアウウー Sa2f-n9nK) 2022/03/01(火)13:50 ID:FuAp7249a(2/2) AAS
 要素が少ないときは新しくリスト作る方がremove/insertよりも数倍速い 
 ただ新しくリスト作るのはメモリを倍食うから、要素数が多くなったら(物理メモリよりも多くなったら)どうだか 
56:  (ワッチョイ ff2f-65e0) 2022/03/01(火)14:23 ID:V9EqT+vw0(1) AAS
 つかそもそも、並べ替えたListそのものを保存する必要があるのかとか 
 初めから必要な順番で保存できないかとか考えたほうが良い気がする 
57:  (スップ Sd8a-8W3/) 2022/03/01(火)14:28 ID:qybIiuxnd(2/2) AAS
 そもそもでいえば並べ替えのAdd時点でPを前に入れたいってわかっていれば 
 それなりの実装もあるんじゃねと思ったりしているから 
 質問の内容だけだとやりかたなんて色々あるよね 
58(1):  (ワッチョイ ca79-OOjg) 2022/03/01(火)18:06 ID:fDW5QBJr0(1/3) AAS
 糞みたいな方法しか出てきてないけど普通に考えると 
 1) 元のリストからPを抜き出しつつ、Pだけ抜き出したリストを作る 
 2) Pだけのリストの後ろに元のリストをマージする 
 あとはList<>で気の利いた方法がないか調べる 
59:  (ワッチョイ 4f17-ibFl) 2022/03/01(火)18:38 ID:SjVwjYfg0(1) AAS
 >>58 
 ここまでで一番糞なのは案件満たしてないあんたやんけ 
 それだと「I,N,P,P」から「P,P,I,N,P,P」になってまうでw 
60:  (ワッチョイ 6b2d-jC74) 2022/03/01(火)18:55 ID:xQ0S3wJN0(1) AAS
 >>55 
 元のリストの中身(OBJクラスのインスタンス)をコピーせずに新しいリストで使いまわせば 
 メモリー消費の一時的な増加はあまり気にしなくて良い場合が多いんじゃないかな 
61(1):  (ワッチョイ ca79-OOjg) 2022/03/01(火)19:17 ID:fDW5QBJr0(2/3) AAS
 めんどくせえやっちゃこれでいいだろ 
 OBJList.Sort((a,b) => (a.Name != b.Name) ? (a.Name != "P") ? (b.Name != "P") ? 0 : 1 : -1 : 0); 
62:  (オイコラミネオ MMeb-g6h8) 2022/03/01(火)20:17 ID:lFABJG9JM(1/2) AAS
 >>61 
 これは初心者には呪文にしか見えないだろw 
63:  (オイコラミネオ MMeb-g6h8) 2022/03/01(火)20:18 ID:lFABJG9JM(2/2) AAS
 訂正 
 誰にも呪文にしか見えない 
64:  (ワッチョイ 6f5f-vePS) 2022/03/01(火)20:58 ID:pQFC2fuH0(1) AAS
 これでプルリク出されたらレビュイー殺してしまうかもしれん 
65:  (ワッチョイ ca79-OOjg) 2022/03/01(火)20:59 ID:fDW5QBJr0(3/3) AAS
 そういやListのソートは不安定だからNoをインデックスに見立てれば安定ソート 
 OBJList.Sort((a,b) => (a.Name != b.Name) ? (a.Name != "P") ? (b.Name != "P") ? (a.No - b.No) : 1 : -1 : (a.No - b.No)); 
 LINQのOrderByは元から安定ソート 
 OBJList = OBJList.OrderBy(a => a.Name != "P").ToList(); 
66(1):  (ワッチョイ 6f02-bukj) 2022/03/01(火)21:09 ID:gr6OEBT80(1/2) AAS
 var weight = new Dictionary() { { "P", 1 }, { "I", 2 }, { "N", 3 } }; 
 var result = OBJList.OrderBy( a => weight[ a.Name ] ).ToList(); 
 の方が好み。エラーチェックは無視。 
67(1):  (ワッチョイ ca01-lzB5) 2022/03/01(火)22:16 ID:FpudFrD40(1) AAS
 >>66 
 それ NIPP ⇒ PPIN になるんじゃね? 
68:  (ワッチョイ 8379-BANU) 2022/03/01(火)22:17 ID:BpvMrVad0(1) AAS
 ワンループで 
 P用参照リストと 
 それ以外参照リスト作って 
 最後にP用を前にしてドッキング 
69:  (ワッチョイ 6336-8W3/) 2022/03/01(火)22:42 ID:kklKOfnn0(1/2) AAS
 datagridviewの垂直スクロールバーについて教えてください。 
 datagridviewを作成した後、 
  
 DataGridViewRow[] list = new DataGridViewRow[50]; 
 (listの中身作成) 
 dataGridView1.Rows.AddRange(list); 
  
 のようにしてdataGridView1にデータを表示させようとすると縦スクロールバーが上手く表示されずフリーズ状態になってしまいます。 
 dataGridViewを作成した後に縦スクロールバーが出るまでdataGridView1.Rows.Addを繰り返して縦スクロールバーを出した後に 
 上記を実行した場合は問題なく表示されます。 
  
 縦スクロールバーを出すために無意味なデータをdataGridViewに表示させるといった不必要な処理を行いたくないのですが、 
 データを投入しなくても縦スクロールバーを出す方法、あるいは 
 dataGridView1.Rows.AddRange(list); 
 を実行してもフリーズしない方法はありますでしょうか? 
70:  (ワッチョイ 6f02-8W3/) 2022/03/01(火)22:53 ID:i/a33NyP0(1) AAS
 とりあえず片っ端からやってみたら 
 外部リンク:www.google.co.jp 
71:  (ワッチョイ 6336-8W3/) 2022/03/01(火)23:36 ID:kklKOfnn0(2/2) AAS
 ありがとうございます! 
 これでできました! 
  
 【C#】DataGridViewで編集不可やスクロールバーを常に表示する | NOARTS 
 外部リンク:noarts.net 
72(1):  (ワッチョイ 6f02-bukj) 2022/03/01(火)23:50 ID:gr6OEBT80(2/2) AAS
 >>67 
 あくまでやり方の一例。 
 問題があるなら自分で何とかしてくれ。 
73:  (ワッチョイ 8a01-k1AF) 2022/03/02(水)00:28 ID:MSZ3LlYF0(1/2) AAS
 AsSpan使ったらどうなるか興味あったからベンチしてみたら 
 1000件くらいだと一番高速だけど結局O(n^2)なので1~2万件でList<T>.Sortとかと逆転した 
 1万件程度なら余程最適化したい場合を除いてどれを選んでも性能的には問題なさそう 
  
 1. List<T>.Sort 
 2. Enumerable<T>.OrderBy 
 3. AsSpan + For Loop 
 4. RemoveAt + Insert + For Loop 
 5. Partition + Concat 
74:  (ワッチョイ 8a01-k1AF) 2022/03/02(水)00:34 ID:MSZ3LlYF0(2/2) AAS
 ところで 
 Span<T>もしくはIEnumerable<T>のどちらかを受け取るジェネリックな関数って定義できる? 
75:  (ワッチョイ 6f02-8W3/) 2022/03/02(水)01:42 ID:O26kNIml0(1/2) AAS
 そりゃ出来るやろ 
 LINQがおもっくそそれだし 
76(1):  (ワッチョイ ca01-+tM1) 2022/03/02(水)05:50 ID:+cCq037X0(1/3) AAS
 >>72 
 いや、おかしいやり方示されても… 
77:  (ワッチョイ ca79-OOjg) 2022/03/02(水)07:20 ID:+1hBA4Bw0(1) AAS
 PとP以外でフィルタしたリストをくっつけるのが判りやすいんかなあ 
 var PList = OBJList.FindAll(a => a.Name == "P"); 
 var NPList = OBJList.FindAll(a => a.Name != "P"); 
 PList.AddRange(NPList); 
 OBJList = PList; 
78(2):  (スッップ Sdea-PHKB) 2022/03/02(水)08:32 ID:Xi4FA93Ld(1) AAS
 >>43 を読む限りの要件は 
  
 1. 比較の方法は「Name=="P"」だけで判断する 
 2. 安定ソートであること 
 3. 結果の返し方は(元のListを上書き変更/新規Listを作ってreturn)→質問者が何も考えてなさそうなので不明 
  
 質問者が現れて要件が確定しないとこれ以上進まんでしょ 
79:  (ワッチョイ ca01-+tM1) 2022/03/02(水)09:19 ID:+cCq037X0(2/3) AAS
 >>78 
 > 3. 結果の返し方は(元のListを上書き変更/新規Listを作ってreturn)→質問者が何も考えてなさそうなので不明 
 元のListの上書きでしょ 
 それやろうとしてエラーになってるんだし 
 本当に必要な要件だったかどうかはわからんが 
80:  (テテンテンテン MM86-VJRT) 2022/03/02(水)10:03 ID:tBhSxL7sM(1) AAS
 変にコレクション弄りまわさずに、Comparer<T>.CreateでカスタムComparer作ってSortかOrderByに食わせろ 
81(1):  (ワッチョイ 6f02-bukj) 2022/03/02(水)10:20 ID:6DUGQdfA0(1) AAS
 >>76 
 あれに「P を先頭に持ってくる以外は元の順位を保持する」手順を追加すればいいだけだろうに。 
 宿題じゃないんだからそこまでは書かんよ。 
82(1):  (ワッチョイ 4a9b-d0o2) 2022/03/02(水)10:21 ID:KGds3ROy0(1) AAS
 sort系持ち出してる人多いけど、P以外の順序は変えないってことは実現できるのか? 
83:  (ワッチョイ ca01-+tM1) 2022/03/02(水)10:39 ID:+cCq037X0(3/3) AAS
 >>81 
 すでにいくつか正解出てるんだから無能のおかしいやり方なんて要らんよw 
上下前次1-新書関写板覧索設栞歴
あと 919 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s