1 名前:デフォルトの名無しさん (ワッチョイ f97b-lsIp) mailto:sage [2016/10/08(土) 21:33:26.22 ID:KfBpvv2w0.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part124 echo.2ch.net/test/read.cgi/tech/1471004887/ ■関連スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467142749/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
335 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/08(火) 22:10:11.42 ID:ic1oOtKi0.net] だからList<T>使えよ JSON云々以前の問題
336 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/08(火) 23:23:57.86 ID:xSnQLWcm0.net] List<T>のアドバイスをもとに 以下のようなコードで良い感じになってきたのですが もう一つ配列の外カッコを表現することができませんでした List<int[]> list = new List<int[]>(); list.Add(new[] { 1, 2 }); list.Add(new[] { 2, 3 }); list.Add(new[] { 3, 4 }); string json = Newtonsoft.Json.JsonConvert.SerializeObject(list); //[[1,2],[2,3],[3,4]] List<int[][]> list = new List<int[][]>();にすると [[[1,2]],[[2,3]]]となってしまい 詰まっております 根本的に考え方が間違っているのでしょうか?
337 名前:デフォルトの名無しさん (ワッチョイ 653c-m5qj) mailto:sage [2016/11/08(火) 23:35:34.26 ID:qV47zIVg0.net] だからなぜ配列使うのかと…
338 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/08(火) 23:55:21.12 ID:xSnQLWcm0.net] すみません 経験不足で、配列以外でやる方法が 想像つきません どういうイメージでやれば良いのか 教えて頂きたいです
339 名前:デフォルトの名無しさん (ワッチョイ 0117-7tG6) mailto:sage [2016/11/09(水) 00:02:28.77 ID:hsAPe+Q00.net] そこは置いとくとして。これで解決したりしてな。(試してない) 解決なら変数の内容というか意味を考えるべきだな。 var list2 = (new List<int[][]>()); list2.Add( list.ToArray() ); // list2 をシリアライズ
340 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 03:15:10.85 ID:qcMduGDNp.net] JSONの形だけでいいならこんなのでもいい List<int[]>[] list3= {list}; int[][][] list4= {list.ToArray()};
341 名前:デフォルトの名無しさん (ワッチョイ e93a-DGmA) mailto:sage [2016/11/09(水) 03:33:35.81 ID:KnEUpDo20.net] >>332 List<List<List<int>>>
342 名前:デフォルトの名無しさん (ワッチョイ 517b-8n5s) mailto:sage [2016/11/09(水) 05:25:22.53 ID:moqMbmIT0.net] >>332 とりあえずその部分に納得したいならこうやれば形になるよw var list = new[] { new List<int[]>() }; list[0].Add(new[] { 1, 2 }); list[0].Add(new[] { 2, 3 });
343 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 14:02:25.71 ID:qcMduGDNp.net] 多分これ>>332 は理解できないだろw 前提1: JSONはJavaScript Object Notationの略でjavascriptの文法をベースにした記法である 前提2: javascriptは動的型付け原語であり、C#は 静的型付け原語である 前述3: JSONにおける配列は[]で表され、C#のList<T>と配列はJSONの配列に変換される 前提1,2からC#で必要な型の情報はJSONには記述されないため、JSONをC#に変換する場合この型情報を補完しなければならない 前提3から動的な操作を行う個所はList<T>それ以外を配列で記述するといい 学習または理解のために C#でもコンパイラによる型推論によって型宣言を省略できるが、理解するまでは省略せずに型をきちんと書く方が理解しやすい よってvar禁止、初期化時の型宣言の省略禁止でそれぞれを書き換えてみると多少理解が進むんでないかな? 例として>>338 のlistと>>336 のlist3は省略せずに書くと以下のようになり同じものであるとわかる。 List<int[]>[] list = new List<int[]>[] { new List<int[]>() }; ※ List<int[]>[] は intの配列(int[]) の リスト(List<T>) の 配列(末尾の[]) という意味 ※ varは、右辺で型が明らかな場合コンパイラが型を推定して補完してくれる。コンパイル時に展開されるので省略せずに型を書くのと等価になる
344 名前:デフォルトの名無しさん (ワッチョイ 3e4c-DGmA) mailto:sage [2016/11/09(水) 14:19:57.52 ID:ESFv9usG0.net] >>339 優しいなおめぇ
345 名前:332 (ラクッペ MM2d-DGmA) mailto:sage [2016/11/09(水) 17:18:24.33 ID:ItbFMo65M.net] 試行錯誤の結果 教えて頂いたList<T>にて 希望のjsonを作れました 基礎的な理解もなく ネットで得る断片的なソースの コピペでは応用が効かないと痛感しています ありがとうございます
346 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/09(水) 19:36:58.06 ID:z4p8v0swr.net] コピペは止めとけ。 Ctrl-C,Vを禁止するだけでプログラミング能力が上がるとか何とか。
347 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 20:18:59.79 ID:GH2RO7KKM.net] コピペした回数により残業代減額
348 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) [2016/11/09(水) 21:32:55.41 ID:xe8Gs44h0.net] LINQのSelectで、メンバ「txt」が"a"の場合、 メンバ「intdata」の符号を反転するということをしたいのですが、 どのように書けば良いのでしょうか? LINQで条件式が書けるとコードが随分小さくなるので 助かります!!! class testClass { public string txt { get; set; } public int intdata { get; set; } } static void Main(string[] args) { List<testClass> ts = new List<testClass>(); ts.Add(new testClass { txt = "a", intdata = 1 }); ts.Add(new testClass { txt = "b", intdata = 2 }); var tsFnc = ts.Select(e => e.txt == "a" ? e.intdata = e.intdata * -1); //←エラー }
349 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 21:46:02.27 ID:GH2RO7KKM.net] e.txt == "a" ? new testClass() { txt = e.txt , intdata = -e.intdata } : e
350 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/09(水) 21:58:25.28 ID:EZkCstT40.net] それインラインのラムダで書いてしまうとコードの意図がわかりにくいから static testClass Hoge(testClass e) => (>>345 ); のようにメソッドとして外出しした上で ts.Select(Hoge) と書くのがいいんじゃないかな メソッド本体をラムダの形式でスマートに記述できるようになったことだし、 ちょっと複雑なラムダには積極的にメソッド名を付けることを心がけるといい
351 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 22:25:47.94 ID:qcMduGDNp.net] >>344 そりゃ値を返さなければエラーになるよな ts.Select( (e) =>{ if(e.txt=="a") e.intdata*=-1; return e; });
352 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) [2016/11/09(水) 22:41:05.99 ID:xe8Gs44h0.net] >>347 期待した結果が出ました。 ありがとうございます!!! 色んなサイトを回ったのですが、なかなか条件式を書いているサンプルが無かったもので、助かります!!!
353 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/09(水) 22:44:01.71 ID:xe8Gs44h0.net] >>346 従来のやり方を単純にラムダに変えるのではなく、 ラムダ的なスマートさも追及すべきということですね。 参考になります。
354 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/09(水) 22:49:39.71 ID:xe8Gs44h0.net] ラムダというかLINQは凄い便利なんですけど、 なんか重いんですよね。 やぼったく書いていた処理をラムダにしたら 可読性が上がった反面、処理に倍の時間がかかるようになってしまい。。。 便利ゆえの宿命なのか、 使いこなせてないだけなのか、 その両方かって気がしています。
355 名前:デフォルトの名無しさん (ワッチョイ 5eed-DGmA) mailto:sage [2016/11/09(水) 22:52:28.34 ID:GViSYmlw0.net] 適宜ToArrayしろってResharperが言ってた
356 名前:デフォルトの名無しさん (ワッチョイ 8a02-2mfK) mailto:sage [2016/11/09(水) 23:09:04.87 ID:xK7OwzcU0.net] LINQにしたら倍ほど遅くなるコードって例えばどんなん?
357 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/09(水) 23:23:27.68 ID:EZkCstT40.net] >>347 はないわ インプレースで更新するんなら普通に foreach (var e in ts) if (e.txt == “a”) e.intdata *= 1; でいいだろ 副作用がないように見えてこっそり更新してるってのは罠に近い極めてタチの悪いコード
358 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 23:31:35.24 ID:GH2RO7KKM.net] >>352 実処理がメソッド呼び出しオーバーヘッドより少ない時かな ボトルネックにはならないけど倍以上にはなる
359 名前:デフォルトの名無しさん (ワッチョイ f023-8n5s) mailto:sage [2016/11/09(水) 23:31:54.26 ID:0UIYYtz/0.net] もしLinqでやりたいのならForEachの拡張メソッドを書くか、IxをNuGetで入れるほうが健全だな
360 名前:デフォルトの名無しさん (ワッチョイ 9f02-u2pL) mailto:sage [2016/11/10(木) 01:11:52.00 ID:gZ1S6RPu0.net] >>354 サンプルコードある? その論理でいくと、実処理がゼロの時が最も顕著で 通常のループよりLINQでのループ(列挙)が倍以上遅いってことになるんだが 繰り返し判定が遅いのかループの準備が遅いのか知らんが LINQのほうが多少遅いとしても、どれだけ回したら有意な差がでるほどオーバーヘッドあるんだ
361 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/10(木) 01:38:07.59 ID:zCCtWAZL0.net] 何万回も回すとか、コンパイラを作るとかじゃなければメソッド呼び出しのコストはほぼ無視できるはず たぶん、無駄のある書き方してるか、最適化を邪魔するような記述になってるんじゃないかな
362 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/10(木) 01:48:41.09 ID:4pFcdHJlM.net] >>356 だからボトルネックにはならないって書いたじゃん 倍になろうが大したことない 遅い派の人は処理オーダー違うアルゴリズムと比較してるんだろ
363 名前:0-WVKM) mailto:sage [2016/11/10(木) 02:05:10.17 ID:wdbpo9Rt0.net] 倍遅いって記述がアレで単にループ倍増しているだけじゃね
364 名前:347 (ワッチョイ 033c-9MLS) mailto:sage [2016/11/10(木) 02:45:22.58 ID:BAuxaWeL0.net] >>353 いや俺に言われても>>344 が求めてるのは "LinqのSelectで〜メンバ「intdata」の符号を反転する" 方法だからな 要求仕様がLinqのSelectで行うことを明示していて、intdataの反転した別インスタンスを返すではなくメンバ変数を反転すると定義しているならそう書くだけだ こんな書き方するべきじゃないってのはその通りだがそれは>>344 に言ってくれ
365 名前:デフォルトの名無しさん (オッペケ Sr2f-WFrU) mailto:sage [2016/11/10(木) 03:27:07.24 ID:+tyQ2nEUr.net] 副作用は書かないのがコツ。 >>345 が考え方としてはよろしい。
366 名前:デフォルトの名無しさん (オイコラミネオ MMdf-h9op) mailto:sage [2016/11/10(木) 09:30:47.14 ID:SIcifk3eM.net] IxとRxってどう違うの
367 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/10(木) 10:49:41.41 ID:otGHoxmha.net] 普通に考えてそもそもSelectを使うのがおかしいw >>353 は途中まで普通のこと言ってるのに>>345 は否定しないのはおかしいw
368 名前:デフォルトの名無しさん (ワッチョイ b3dc-PwKp) mailto:sage [2016/11/10(木) 12:52:58.94 ID:+0vOVL7/0.net] >>347 は副作用ないしインスタンスの同一性に拘らないなら目的は果たせてるだろ 分かりにくい糞コードかもしれないが、コードの形をした糞である>>347 のように完全否定されるほどのものではないよ
369 名前:デフォルトの名無しさん (ワッチョイ 033c-9MLS) mailto:sage [2016/11/10(木) 13:14:42.66 ID:BAuxaWeL0.net] こういう議論が面倒だから>>344 の要求に忠実に書いた訳だが… そもそもSelectを使うのが間違いというのは議論の余地がないからいいとして、副作用を避けるなら>>345 はないわw 元のインスタンスと別インスタンスとを混在させて返すってのは罠じゃないのかと new testClass() { txt = e.txt , intdata = e.intdata*(e.txt=="a"?-1:1) }; 別インスタンスを返すなら符号の反転の有無に関わらず必ず別インスタンスで返すべき
370 名前:デフォルトの名無しさん (ワッチョイ a723-teht) mailto:sage [2016/11/10(木) 13:43:53.32 ID:o8sMendu0.net] つか、select使わずに拡張メソッド作ったほうがよくね 例えばこんなやつ ideone.com/YQ5uTI
371 名前:デフォルトの名無しさん (ワッチョイ a70d-Cgco) [2016/11/10(木) 20:14:55.52 ID:jVtZ8e8U0.net] WPFでVisual StudioのようなタブやドッキングウィンドウがあるUIを作りたく思い そのようなテンプレートを探しています 「AvalonDock」というものは見つけましたが他にご存知なら教えてください
372 名前:デフォルトの名無しさん (ブーイモ MMef-9MLS) mailto:sage [2016/11/10(木) 20:37:33.96 ID:uFjDSD4sM.net] >>365 もう少し視野を広くした方がいい データ転送オブジェクトや値オブジェクトといったワードで検索してごらん そのあとはクエリ・コマンド分離の原則を調べよう
373 名前:デフォルトの名無しさん (オッペケ Sr2f-WFrU) mailto:sage [2016/11/10(木) 21:24:48.41 ID:+tyQ2nEUr.net] >>366 それの有り難みが理解出来る人は人類では、ほとんどいないw
374 名前:デフォルトの名無しさん (ワッチョイ 7f20-teht) mailto:sage [2016/11/10(木) 22:02:45.75 ID:INda+yqE0.net] 下のようなコードで動的な数のtaskを作ることは できるでしょうか? static async Task ts() { List<Task> tsLists = new List<Task>(); var task1 = Task.Run(() =>{/*処理*/}); var task2 = Task.Run(() => {/*処理*/}); tsLists.Add(task1); tsLists.Add(task2); await Task.WhenAll(tsLists); } Task.WhenAllに配列を含めることができるのなら taskもできるのではと思いまして よろしくお願いします
375 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/10(木) 22:55:20.24 ID:pEVMYV3p0.net] var task1 は、オブジェクトだろ? 当然、コンテナにも入れられる
376 名前:デフォルトの名無しさん (ワッチョイ 4379-teht) mailto:sage [2016/11/10(木) 22:56:21.90 ID:ApowNrKS0.net] C#の基本を理解していない奴がスレッドに手出したら死ぬからやめておけ
377 名前:デフォルトの名無しさん (ワッチョイ 7f20-teht) mailto:sage [2016/11/10(木) 23
] [ここ壊れてます]
378 名前::58:51.41 ID:INda+yqE0.net mailto: >var task1 は、オブジェクトだろ? オブジェクトと聞いて、下のようなコードを書いたら 期待通りの結果が出ました ありがとうございます class Program { static async Task ts() { List<Task> tsLists = new List<Task>(); List<object> taskArry = new List<object>(); taskArry.Add(Task.Run(() => { Console.WriteLine("1"); })); taskArry.Add(Task.Run(() => { Console.WriteLine("2"); })); foreach (var tsk in taskArry) { var task = tsk; tsLists.Add((Task)task); } await Task.WhenAll(tsLists); } static void Main(string[] args) { var t = ts(); t.Wait(); for (;;) ; } } 思いつきで書いているので、アンチパターンをしているかも知れませんが。。。 [] [ここ壊れてます]
379 名前:デフォルトの名無しさん (ワッチョイ 8394-5NgJ) mailto:sage [2016/11/11(金) 02:00:56.00 ID:/+d8XFyb0.net] >>370 のコードの方は、まぁ、普通 (TaskふたつくらいならわざわざListは使わないけど) しかし、>>373 は……どうしてこうなった
380 名前:デフォルトの名無しさん (ササクッテロリ Sp2f-9MLS) mailto:sage [2016/11/11(金) 02:40:34.81 ID:6sQwg64Zp.net] ソフトの設定をシリアル化するために一つのクラスにまとめたのはいいけどどうアクセスするのが普通なのかよく分かりません 全部public staticにして直接さわってもいいのでしょうか
381 名前:デフォルトの名無しさん (ワッチョイ b37b-hNMU) mailto:sage [2016/11/11(金) 03:31:49.89 ID:by5SD+CT0.net] switch文で文字列による分岐をする場合 var hoge="hoge"; // パターン1 var firstChar=hoge.SubString(0,1); switch(firstChar){ case "a": switch(hoge){ case "akina": ・・・ case "akiko": ・・・ case "asaka":: ・・・ case "amika": ・・・他ずらっと続く } break; case "h": switch(hoge){ case "honoka": ・・・ case "hosaka": ・・・ case "hoge": ・・・他ずらっと続く } break; } // パターン2 switch(hoge){ case "akina": ・・・ case "akiko": ・・・ case "asaka":: ・・・ case "amika": ・・・ case "honoka": ・・・ case "hosaka": ・・・ case "hoge": ・・・ } パターン1、2でどちらが目的の文字列にたどり着く速度が早いのでしょうか
382 名前:デフォルトの名無しさん (ワッチョイ a70d-Cgco) [2016/11/11(金) 04:06:38.01 ID:qvZdoaA90.net] ... DropShadowEffect.Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},Path=(params:General.ShadowBrush).(SolidColorBrush.Color)}" /> この記述に間違いはありますでしょうか?
383 名前:デフォルトの名無しさん (ワッチョイ 937b-teht) mailto:sage [2016/11/11(金) 04:43:55.58 ID:MLb8BpI60.net] >>376 後者
384 名前:デフォルトの名無しさん (ワッチョイ 3319-7KSV) mailto:sage [2016/11/11(金) 08:50:36.60 ID:OnmZcNT90.net] >>377 Path中の括弧は基本的に添付プロパティの指定に使うもんだけど 型明示とかの意味で使おうとしてない?
385 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/11(金) 10:27:04.66 ID:M2uBl8fv0.net] >>373 >List<Task> tsLists = new List<Task>(); >List<object> taskArry = new List<object>(); クラスの継承チェーンでは、Objectクラスがすべてのクラスの基本で、 Object以外のクラスは、すべてそこから派生している。 もちろん、Taskクラスも、Objectクラスの派生クラス Objectクラスは親クラスで、より抽象的なもの。 Taskクラスは派生クラスで、Objectクラスより具体的で、限定されているため安全だから、 Taskをそのまま使えばいい Taskクラスは、Objectクラスが持っている、属性・メソッドをすべて持っているから、 そのままObjectクラスとして使える。 (Task)task で、キャストする必要などない オブジェクト指向を、基本から勉強すべし
386 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/11(金) 10:43:07.91 ID:M2uBl8fv0.net] >>376-378 漏れも、辞書データベースを作る際、 aで始まる単語の表・bで始まる単語の表・cで始まる単語の表、などのように表を分けるか、 すべてを1つの表にするかで迷う パターン1の方が、先に限定(枝刈り)されるから、速いような気がするけど、 caseが8つ以上あると、コンパイラが最適化して、 文字列をハッシュ化(整数化)するかも知れないので、パターン2の方が速いかも
387 名前:デフォルトの名無しさん (スッップ Sd1f-PwKp) mailto:sage [2016/11/11(金) 12:20:00.46 ID:B0EI7WuJd.net] トライ木って奴だな 実際Stringのハッシュにこれが使われてるかは知らんが
388 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/11(金) 12:26:36.61 ID:TqB+9XQ4a.net] >>376 実験して報告してw あと、Dictionary<String, Action>を使うケースも追加で でもまあ、人が手動でコーティングできる程度の分岐では直感的には 後者の方が速そうな気がする。
389 名前:デフォルトの名無しさん (ワッチョイ 4bda-teht) mailto:sage [2016/11/11(金) 12:31:45.60 ID:UQPlBidt0.net] DictionaryにFunc突っ込んだほうがスッキリしていいだろう
390 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/11(金) 17:11:54.51 ID:TqB+9XQ4a.net] >>376 あと細かいことだけど、「分類」に使うのが常に最初の1文字だけなら 素直にcharにした方が(つまりhoge[0])の方が速い気が
391 名前:デフォルトの名無しさん (ブーイモ MM1f-9MLS) mailto:sage [2016/11/11(金) 20:20:29.68 ID:Bi+hCNL7M.net] >>375 設定クラスとファイルは適度に分割する staticは使わない 設定読み取りインターフェースとクラスを作る 設定に依存するクラスにインジェクションする
392 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/11(金) 22:27:34.93 ID:+gNs9Nbk0.net] >>376 多分後者は最適化でジャンプテーブルに変わるのでそっちのほうが早いかなぁ
393 名前:デフォルトの名無しさん (ワッチョイ b3dc-PwKp) mailto:sage [2016/11/12(土) 00:58:23.88 ID:e739leKk0.net] >>376 本気で最適化するならプロファイル取って出現頻度順にソート 一般的にそういうのは分布がかなり偏るので統計的に速くなる
394 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 08:39:07.19 ID:rgkWnGP70.net] 内部で二分探索やジャンプテーブルに変わろうが、毎回文字列を比較してる時点で遅い 分量が不明ならDictionaryに変えるべき 自分でアルゴリズム実装する場合はC#ではunsafeにしない限り遅い
395 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/12(土) 08:56:42.02 ID:NIqnWzQ8M.net] 仮に倍早くなっても辞書をハードコードされたswitchで実装はしたくないな
396 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 09:36:17.93 ID:rgkWnGP70.net] 比較前に一意な文字列に変換して、文字列値としてではなくアドレスやハッシュ値を探索するのが一番速いんだけど そういうのって標準にないんだっけ
397 名前:デフォルトの名無しさん (ワッチョイ a723-teht) mailto:sage [2016/11/12(土) 09:47:10.83 ID:IKX2nQlp0.net] 昔見たLinuxのシェルのソースじゃ最初の方のスイッチ使ったロジックだったな C言語の文字列の扱いなら速度差もあるかもしれんね
398 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/12(土) 10:14:16.67 ID:gzcT9VGJM.net] >>391 Internというのがある 同じ値の文字列を同じインスタンスの文字列にして返す
399 名前:デフォルトの名無しさん (ワッチョイ 9f02-u2pL) mailto:sage [2016/11/12(土) 15:14:10.12 ID:Ayj+NND50.net] caseずらずらと並べると、順次検索するのか? それだとAxxxは早いけどYxxxは遅いとかいうことになると思うんだが 単純にどっちが早いかなんて比較できんわな
400 名前:デフォルトの名無しさん (ワッチョイ 7f17-C1EH) mailto:sage [2016/11/12(土) 15:33:15.88 ID:duqbQJlR0.net] 質問です アプリにメインのフォームとモードレスなフォームの二つがあります モードレスなフォームを操作したあとに メインのフォームのボタンを押そうとすると メインのフォームへフォーカスをあてるためにワンクリック、 ボタンを押すためにもう一回ワンクリックという具合に 2回クリックしないといけないのですが、 これをワンクリックに縮める方法はなにかありますか? (一つのウィンドウにまとめる方法以外で)
401 名前:デフォルトの名無しさん (ワッチョイ 033c-9MLS) mailto:sage [2016/11/12(土) 15:42:42.07 ID:IIxQEFvy0.net] 世界一IQの低いソースコードはこれ。ってネタを思い出したわ >>394 switch はジャンプテーブルでの実装なので末尾のラベルであっても先頭のラベルと処理時間に差は出ない また同じ理由から選択肢の数が増えても処理時間は殆ど増えない
402 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:sage [2016/11/12(土) 15:47:36.63 ID:kNoTIrA70.net] >>396 おいおい,一度に全部を比較できないだろう? Axxx は最初の方に比較するし Yxxx は最後の方に比較するのだったら Yxxx が確定するまでの時間は Axxx よりも大きくなるのでは? ジャンプテーブルにしようが,個々の分岐によって時間差が出るのではないかね
403 名前:デフォルトの名無しさん (ワッチョイ b75e-FQoa) mailto:sage [2016/11/12(土) 15:58:38.99 ID:GAbwEXNG0.net] >>395 メインのフォームのボタンにMouseEnterでthis.Activate()とFocus()するようにしたら フォーカスをあてるための分は省略できる
404 名前:デフォルトの名無しさん (ワッチョイ 6bed-eZXk) mailto:sage [2016/11/12(土) 16:17:42.31 ID:VXYUWtaP0.net] >>395 WM_MOUSEACTIVATEでググるといい
405 名前:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp) mailto:sage [2016/11/12(土) 16:30:32.34 ID:HzMgTMM90.net] >>397 ジャンプテーブル自体を知らないなら初心者スレだからまああるとは思うがジャンプテーブル知ってて > Axxx は最初の方に比較するし > Yxxx は最後の方に比較するのだったら > Yxxx が確定するまでの時間は Axxx よりも大きくなるのでは? はないわ 言葉だけ中途半端に覚えてる知ったかなんだろうな...
406 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:sage [2016/11/12(土) 16:34:08.09 ID:kNoTIrA70.net] >>400 お前,物事を本当に突き詰めて考えたことが無いんだろう? 今回の文字列比較では差が出て当然 ジャンプテーブルといっておれば,とか間抜けにもほどがある
407 名前:デフォルトの名無しさん (ワッチョイ c3a1-PwKp) mailto:sage [2016/11/12(土) 17:10:42.68 ID:x4E8HTQB0.net] 文字列比較でテーブル上の位置を特定するには結局ハッシュテーブルと同様の実装がされてるんじゃないの 低レベルな分僅かに高速に動くかも知らんが
408 名前:デフォルトの名無しさん (ワッチョイ 7f17-C1EH) mailto:sage [2016/11/12(土) 17:11:17.70 ID:duqbQJlR0.net] >>398-399 toolStripに対して、>>398 のMouseEnterでthis.Activate()とFocus()する方法でできました WM_MOUSEACTIVATEをハンドルする方法もあるのですね。勉強になります ありがとうございます
409 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:sage [2016/11/12(土) 17:21:06.75 ID:kNoTIrA70.net] >>402 お前すべての文字列についてハッシュ値が異なるように設計できるとでもいうのか? ハッシュ値をジャンプテーブルに使うとはそういうことだ,そんな無茶な主張をするのか?
410 名前:デフォルトの名無しさん (ワッチョイ a7da-teht) mailto:sage [2016/11/12(土) 17:24:24.15 ID:5Ttb/Uep0.net] ハッシュテーブルと言ってる人につっかかるなよ
411 名前:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp) mailto:sage [2016/11/12(土) 19:31:45.56 ID:HzMgTMM90.net] >>404 知ったか君は完全ハッシュも知らないのになんでそんな偉そうなのか理解に苦しむ w
412 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/12(土) 19:37:48.04 ID:SdQQy6fO0.net] 現在はもっと最適化が入るかもしれんが、やっぱりハッシュテーブルだね qiita.com/NetSeed/items/fd5cd2cdb2ba021518ca ハッシュが衝突するときだけ文字列比較に行くんじゃないかな まぁ、hashdosでもされない限りボトルネックにはなりにくいんじゃない?
413 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:sage [2016/11/12(土) 19:52:58.86 ID:kNoTIrA70.net] >>406 で,不特定な文字列に対して比較する場合に完全ハッシュを実現することはできるの? >>407 ハッシュが衝突するかどうかは,文字列比較までやってしまわないと判明しないのでは?
414 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/12(土) 20:01:20.50 ID:SdQQy6fO0.net] >>408 聞く前に実装を確認したほうが早い https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,bcd13bb775d408f1
415 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:ちょっとすり替えたw [2016/11/12(土) 20:11:38.18 ID:kNoTIrA70.net] >>409 なるほどね,不特定な文字列のみ対象とする連想配列ならば,まずはハッシュで付き合わせるのは「あり」なんだね でも,特定文字列と不特定な文字列比較の case の実装について話しているのに,不特定な文字のみ対象の連想配列の例を出すのはどうかと思うよ
416 名前:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp) mailto:sage [2016/11/12(土) 20:31:54.23 ID:HzMgTMM90.net] >>408 > で,不特定な文字列に対して比較する場合に完全ハッシュを実現することはできるの? コンパイル時に確定してるなら可能 完全ハッシュ アルゴリズム とかでググれ > ハッシュが衝突するかどうかは,文字列比較までやってしまわないと判明しないのでは? ハッシュの衝突の意味がわかってないのか? 異なる入力に対して同一のハッシュ値が生成されることで当然コンパイル時にわかるから衝突するハッシュ値が生成された時だけ文字比較すればいいだけ
417 名前:デフォルトの名無しさん (スフッ Sd1f-PwKp) mailto:sage [2016/11/12(土) 20:35:13.60 ID:nrwwVciNd.net] >>410 なんか違和感。 不特定の文字列の中に、特定の文字列は内包されるような気がする。概念的な話になるけど。
418 名前:デフォルトの名無しさん (ワッチョイ 7f13-ChQh) mailto:sage [2016/11/12(土) 20:41:39.03 ID:kNoTIrA70.net] >>411 >コンパイル時に確定してるなら というのは不特定の文字列とはいわないよ 何がくるか分からない文字列に対して完全ハッシュは無理 >>412 もう少しお話をおききしたいが
419 名前:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp) mailto:sage [2016/11/12(土) 20:54:31.74 ID:HzMgTMM90.net] >>413 ああ、入力側の話か 分岐した後に一度だけ確認すればいいだけ 確認すべき文字列は確定してるから
420 名前:デフォルトの名無しさん (スフッ Sd1f-PwKp) mailto:sage [2016/11/12(土) 21:31:32.38 ID:nrwwVciNd.net] >>413 うーん、不特定な文字列に対して安全なら、それは特定の文字列に対しても安全では無いの? パフォーマンスは置いといて。 この包丁は誰にとっても安全です、なら、この俺にとっても安全だろうし、>>413 にとっても安全だと。 竹光でもさ。 ハッシュが衝突するならオープンアドレス法かなんかでシノニムうまく扱うしか無いけど。 現実問題、Knuthのあの関数でそうそう衝突はしないけど。
421 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/12(土) 21:48:02.84 ID:SCKfSUb2a.net] >>395 これ、せっかくVista以降改善された仕様を無にする行為だと思うんだけど
422 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 21:53:54.19 ID:rgkWnGP70.net] ウィンドウのフォーカス周りって10で相当わけわかめな仕様になってない? ところでわけわかめって通じる?
423 名前:デフォルトの名無しさん (ワッチョイ 033c-Cgco) mailto:sage [2016/11/12(土) 21:56:33.32 ID:tSXTeFta0.net] 通じる(30代)
424 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 21:58:32.19 ID:rgkWnGP70.net] 何時頃だったか裏にいたウィンドウがアクティブになろうとしてブリンクするいらん仕様を盛り込んでから俺の中で既におかしくなってるけど 10でさらにわけわかめになってる
425 名前:デフォルトの名無しさん (ワッチョイ 7f13-PwKp) mailto:sage [2016/11/12(土) 22:56:05.49 ID:TM8SsXVk0.net] >>417 「意味とろろ」まで付けないとだめ
426 名前:デフォルトの名無しさん (ワッチョイ 377b-U3jc) [2016/11/13(日) 03:09:33.62 ID:sNDrzqcx0.net] ファイルをサーチしてそのFileInfo.FilenameをListBoxに表示したい。 あとでItemをクリックしたとき、FileInfoの別のプロパティも参照したいのでFileInfo 自体もListBoxに保存しておきたい。 1.ListBoxを継承したコントロールを作るのは手間がかかる。 2.ListBoxを継承したクラスを作って、Formにaddすることもできるが、これだと 位置とサイズを設定するのが面倒だ。 なにか良い方法はないか?
427 名前:デフォルトの名無しさん (ワッチョイ 377b-U3jc) [2016/11/13(日) 03:28:05.31 ID:sNDrzqcx0.net] 自己解決した。
428 名前:デフォルトの名無しさん (ワッチョイ 377b-U3jc) [2016/11/13(日) 03:33:14.17 ID:sNDrzqcx0.net] やっぱりだめやった。Objectは保存できるが、Stringも同時に保存したい。 二つ同時はむつかしいやろな。
429 名前:デフォルトの名無しさん (ワッチョイ 377b-U3jc) [2016/11/13(日) 03:33:57.68 ID:sNDrzqcx0.net] やっぱり解決した。W thanks
430 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/13(日) 11:41:32.61 ID:l4pNS+tdM.net] おめでとう
431 名前:デフォルトの名無しさん (ワッチョイ d317-eZXk) mailto:sage [2016/11/13(日) 11:48:17.12 ID:DlcyGqZP0.net] ワロタ
432 名前:デフォルトの名無しさん (ワッチョイ 9f02-EqbM) mailto:sage [2016/11/13(日) 15:32:47.36 ID:PMfnb6vA0.net] WPFのリストボックスとか任意の型のリストで持てるんじゃなかったっけ
433 名前:デフォルトの名無しさん (オッペケ Sr2f-PwKp) mailto:sage [2016/11/13(日) 15:35:53.81 ID:LTz5BAc9r.net] まじかよ糞フォームは独自リストをバインドすることもできないのか
434 名前:デフォルトの名無しさん (ワキゲー MMff-UXqH) mailto:sage [2016/11/13(日) 16:33:34.20 ID:bY6b9EITM.net] ListBoxはバインドできるよ ListViewは無理だけど
435 名前:デフォルトの名無しさん (オッペケ Sr2f-PwKp) mailto:sage [2016/11/13(日) 16:37:40.46 ID:uxmSSaQNr.net] WPFのメリットってなに?