[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/09 11:23 / Filesize : 313 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part125



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

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のメリットってなに?

436 名前:デフォルトの名無しさん (ワッチョイ 377b-U3jc) mailto:sage [2016/11/13(日) 17:48:03.25 ID:sNDrzqcx0.net]
public static int CountList<T>(List<T> list, Func<T, bool> predicate)
{
int count = 0;
foreach (T element in list){
// predicateが参照するメソッドを、elementを引数に渡し呼び出している
if(predicate(element)){
// 真ならカウンタをインクリメント
count++;
}
}
return count;
}

CountList<T> これはT型の変数を返すという意味なのにリターンはstatic int
なのはなぜ?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef