[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part154 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part154 http://mevius.5ch.net/test/read.cgi/tech/1644416019/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
45: デフォルトの名無しさん (アウアウウー Sa2f-n9nK) [sage] 2022/02/28(月) 13:06:35.56 ID:UX0HcLa3a そういうのはforで後ろから回して、削除、挿入 http://mevius.5ch.net/test/read.cgi/tech/1644416019/45
46: デフォルトの名無しさん (テテンテンテン MM86-g6h8) [sage] 2022/02/28(月) 17:42:35.91 ID:XSUMuMfaM >>43 そもそもがなんで順番変えるな!って怒られるかわかる? 分かったら対応もわかるはず http://mevius.5ch.net/test/read.cgi/tech/1644416019/46
47: デフォルトの名無しさん (ワッチョイ 06e9-jC74) [] 2022/02/28(月) 19:07:11.88 ID:Dbx5MQPW0 >>46 foreach中に順番変えられたらforeachが成り立たないのだろうなとは思いました。 頂いたアドバイスからPを別のリストに移動してドッキングしても 邪道では無さそうなので、そうしようと考えています。 http://mevius.5ch.net/test/read.cgi/tech/1644416019/47
48: デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 11:27:38.32 ID:Dq7cA1DN0 それだけのために一時バッファとしてもう一個リスト作るのはスマートじゃない 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); } http://mevius.5ch.net/test/read.cgi/tech/1644416019/48
49: デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 11:38:43.21 ID:Dq7cA1DN0 >>48 そういえばint i = 1からでよかったな http://mevius.5ch.net/test/read.cgi/tech/1644416019/49
50: デフォルトの名無しさん (ワッチョイ 8a01-k1AF) [sage] 2022/03/01(火) 12:59:14.06 ID:haFp+aqn0 >>48 RemoveAtもInsertもO(n)だから そのやり方なら新規にリストを作るほういいんじゃない? http://mevius.5ch.net/test/read.cgi/tech/1644416019/50
51: デフォルトの名無しさん (スップ Sd8a-8W3/) [sage] 2022/03/01(火) 13:00:38.80 ID:qybIiuxnd >>45が自分もいいきがするけど何も考えずにやると移動したPのデータの順番がおかしくなりそうにも思えたから 自分はPの移動用のリストを用意してもとのリストを後ろから参照して最後にもとのリストに挿入がいいかなと思った http://mevius.5ch.net/test/read.cgi/tech/1644416019/51
52: デフォルトの名無しさん (ラクッペペ MM86-cxam) [sage] 2022/03/01(火) 13:03:47.38 ID:RNWoyucIM List.Sort が出てこないけどなんか欠点でもあるの? http://mevius.5ch.net/test/read.cgi/tech/1644416019/52
53: デフォルトの名無しさん (アウアウウー Sa2f-n9nK) [sage] 2022/03/01(火) 13:14:03.84 ID:FuAp7249a 新しくリストを作るって以上に処理が多くなる http://mevius.5ch.net/test/read.cgi/tech/1644416019/53
54: デフォルトの名無しさん (ワッチョイ ca24-yy09) [sage] 2022/03/01(火) 13:31:44.32 ID:Dq7cA1DN0 >>50 要素数がめちゃくちゃ多い場合はそうだな RemoveAtで発生する後方要素の前方詰めが今回は完全に不要だから一回分多く無駄な処理が挟まってるからな .NET5以上ならCollectionsMarshal.AsSpanを利用して obj_span.Slice(0, i).CopyTo(obj_span.Slice(1, i)); obj_span[0] = obj; とかに変えればO(n)処理は1回だけで済むからどんなパターンでも新規List作成より早く済むと思うが http://mevius.5ch.net/test/read.cgi/tech/1644416019/54
55: デフォルトの名無しさん (アウアウウー Sa2f-n9nK) [sage] 2022/03/01(火) 13:50:15.40 ID:FuAp7249a 要素が少ないときは新しくリスト作る方がremove/insertよりも数倍速い ただ新しくリスト作るのはメモリを倍食うから、要素数が多くなったら(物理メモリよりも多くなったら)どうだか http://mevius.5ch.net/test/read.cgi/tech/1644416019/55
56: デフォルトの名無しさん (ワッチョイ ff2f-65e0) [sage] 2022/03/01(火) 14:23:11.54 ID:V9EqT+vw0 つかそもそも、並べ替えたListそのものを保存する必要があるのかとか 初めから必要な順番で保存できないかとか考えたほうが良い気がする http://mevius.5ch.net/test/read.cgi/tech/1644416019/56
57: デフォルトの名無しさん (スップ Sd8a-8W3/) [sage] 2022/03/01(火) 14:28:49.61 ID:qybIiuxnd そもそもでいえば並べ替えのAdd時点でPを前に入れたいってわかっていれば それなりの実装もあるんじゃねと思ったりしているから 質問の内容だけだとやりかたなんて色々あるよね http://mevius.5ch.net/test/read.cgi/tech/1644416019/57
58: デフォルトの名無しさん (ワッチョイ ca79-OOjg) [sage] 2022/03/01(火) 18:06:27.21 ID:fDW5QBJr0 糞みたいな方法しか出てきてないけど普通に考えると 1) 元のリストからPを抜き出しつつ、Pだけ抜き出したリストを作る 2) Pだけのリストの後ろに元のリストをマージする あとはList<>で気の利いた方法がないか調べる http://mevius.5ch.net/test/read.cgi/tech/1644416019/58
59: デフォルトの名無しさん (ワッチョイ 4f17-ibFl) [sage] 2022/03/01(火) 18:38:32.31 ID:SjVwjYfg0 >>58 ここまでで一番糞なのは案件満たしてないあんたやんけ それだと「I,N,P,P」から「P,P,I,N,P,P」になってまうでw http://mevius.5ch.net/test/read.cgi/tech/1644416019/59
60: デフォルトの名無しさん (ワッチョイ 6b2d-jC74) [sage] 2022/03/01(火) 18:55:33.25 ID:xQ0S3wJN0 >>55 元のリストの中身(OBJクラスのインスタンス)をコピーせずに新しいリストで使いまわせば メモリー消費の一時的な増加はあまり気にしなくて良い場合が多いんじゃないかな http://mevius.5ch.net/test/read.cgi/tech/1644416019/60
61: デフォルトの名無しさん (ワッチョイ ca79-OOjg) [sage] 2022/03/01(火) 19:17:57.35 ID:fDW5QBJr0 めんどくせえやっちゃこれでいいだろ OBJList.Sort((a,b) => (a.Name != b.Name) ? (a.Name != "P") ? (b.Name != "P") ? 0 : 1 : -1 : 0); http://mevius.5ch.net/test/read.cgi/tech/1644416019/61
62: デフォルトの名無しさん (オイコラミネオ MMeb-g6h8) [sage] 2022/03/01(火) 20:17:38.37 ID:lFABJG9JM >>61 これは初心者には呪文にしか見えないだろw http://mevius.5ch.net/test/read.cgi/tech/1644416019/62
63: デフォルトの名無しさん (オイコラミネオ MMeb-g6h8) [sage] 2022/03/01(火) 20:18:29.71 ID:lFABJG9JM 訂正 誰にも呪文にしか見えない http://mevius.5ch.net/test/read.cgi/tech/1644416019/63
64: デフォルトの名無しさん (ワッチョイ 6f5f-vePS) [sage] 2022/03/01(火) 20:58:33.05 ID:pQFC2fuH0 これでプルリク出されたらレビュイー殺してしまうかもしれん http://mevius.5ch.net/test/read.cgi/tech/1644416019/64
65: デフォルトの名無しさん (ワッチョイ ca79-OOjg) [sage] 2022/03/01(火) 20:59:34.53 ID:fDW5QBJr0 そういや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(); http://mevius.5ch.net/test/read.cgi/tech/1644416019/65
66: デフォルトの名無しさん (ワッチョイ 6f02-bukj) [sage] 2022/03/01(火) 21:09:10.33 ID:gr6OEBT80 var weight = new Dictionary() { { "P", 1 }, { "I", 2 }, { "N", 3 } }; var result = OBJList.OrderBy( a => weight[ a.Name ] ).ToList(); の方が好み。エラーチェックは無視。 http://mevius.5ch.net/test/read.cgi/tech/1644416019/66
67: デフォルトの名無しさん (ワッチョイ ca01-lzB5) [sage] 2022/03/01(火) 22:16:34.56 ID:FpudFrD40 >>66 それ NIPP ⇒ PPIN になるんじゃね? http://mevius.5ch.net/test/read.cgi/tech/1644416019/67
68: デフォルトの名無しさん (ワッチョイ 8379-BANU) [sage] 2022/03/01(火) 22:17:08.92 ID:BpvMrVad0 ワンループで P用参照リストと それ以外参照リスト作って 最後にP用を前にしてドッキング http://mevius.5ch.net/test/read.cgi/tech/1644416019/68
69: デフォルトの名無しさん (ワッチョイ 6336-8W3/) [sage] 2022/03/01(火) 22:42:39.70 ID:kklKOfnn0 datagridviewの垂直スクロールバーについて教えてください。 datagridviewを作成した後、 DataGridViewRow[] list = new DataGridViewRow[50]; (listの中身作成) dataGridView1.Rows.AddRange(list); のようにしてdataGridView1にデータを表示させようとすると縦スクロールバーが上手く表示されずフリーズ状態になってしまいます。 dataGridViewを作成した後に縦スクロールバーが出るまでdataGridView1.Rows.Addを繰り返して縦スクロールバーを出した後に 上記を実行した場合は問題なく表示されます。 縦スクロールバーを出すために無意味なデータをdataGridViewに表示させるといった不必要な処理を行いたくないのですが、 データを投入しなくても縦スクロールバーを出す方法、あるいは dataGridView1.Rows.AddRange(list); を実行してもフリーズしない方法はありますでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1644416019/69
70: デフォルトの名無しさん (ワッチョイ 6f02-8W3/) [sage] 2022/03/01(火) 22:53:13.83 ID:i/a33NyP0 とりあえず片っ端からやってみたら https://www.google.co.jp/search?q=datagridview+scrollbars+%E5%B8%B8%E3%81%AB%E8%A1%A8%E7%A4%BA http://mevius.5ch.net/test/read.cgi/tech/1644416019/70
71: デフォルトの名無しさん (ワッチョイ 6336-8W3/) [sage] 2022/03/01(火) 23:36:39.38 ID:kklKOfnn0 ありがとうございます! これでできました! 【C#】DataGridViewで編集不可やスクロールバーを常に表示する | NOARTS https://noarts.net/archives/2703 http://mevius.5ch.net/test/read.cgi/tech/1644416019/71
72: デフォルトの名無しさん (ワッチョイ 6f02-bukj) [sage] 2022/03/01(火) 23:50:02.54 ID:gr6OEBT80 >>67 あくまでやり方の一例。 問題があるなら自分で何とかしてくれ。 http://mevius.5ch.net/test/read.cgi/tech/1644416019/72
73: デフォルトの名無しさん (ワッチョイ 8a01-k1AF) [sage] 2022/03/02(水) 00:28:20.93 ID:MSZ3LlYF0 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 http://mevius.5ch.net/test/read.cgi/tech/1644416019/73
74: デフォルトの名無しさん (ワッチョイ 8a01-k1AF) [sage] 2022/03/02(水) 00:34:33.47 ID:MSZ3LlYF0 ところで Span<T>もしくはIEnumerable<T>のどちらかを受け取るジェネリックな関数って定義できる? http://mevius.5ch.net/test/read.cgi/tech/1644416019/74
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 928 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.025s