1 名前:デフォルトの名無しさん (ワッチョイ 1e06-m8Mb) mailto:sageteoff [2017/04/22(土) 08:52:00.93 ID:iVvswOrb0.net] ■Visual Studio 2017 Community(無償の統合開発環境)等はこちら www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part92 echo.2ch.net/test/read.cgi/tech/1485589613/ ■次スレは>>970 が建てる事。 建てられない場合は他を指定する事。 VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
567 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 00:46:54.25 ID:jPyv6U8B0.net] それC#の質問か?
568 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 01:05:06.10 ID:6KD+nJyx0.net] >>546 ごめんなさい。C#で書いてるのでC#で質問しました。 他に適当なスレが見つからなかったもので。。。
569 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 14:58:19.26 ID:Pxwa7YvH0.net] ライセンス契約の無い奴にそこから先は教えられねーわ。
570 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 15:38:53.66 ID:XzDxjxqSM.net] バイナリファイルをバイト配列に一気に読み込んでLINQでゴリゴリするなんてC#って言うか.netの醍醐味だね。 C、C++と歩んできて正直C#なめてたが、プログラムの書き方変わったよ。
571 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 19:59:56.07 ID:YV8aSpRw0.net] バイナリファイルのバイト配列はストリーム(BinaryReader/Writer)経由でしか扱ったことないな 浅学ですまないが非常に興味があるので、何をする処理にLINQを使っているのか教えてほしい
572 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 20:21:08.97 ID:xPHPGLWh0.net] >>550 横レスだけど「読み込んでLINQ」だからパーサーの部分だろ
573 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 20:48:17.73 ID:Dbb+UGxb0.net] スキップ.テイク.リバースでバイトオーダー反転してデータ取り込むとかだ。
574 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 20:55:37.17 ID:Dbb+UGxb0.net] テキストファイルを一行ずつ読み込むとか、バイナリファイルを1フレームずつ読み込むなんてのは時代遅れなんじゃねかと。 最近は一括読み込みしかしないな。 パフォーマンスはライブラリやOSが担保してくれる。
575 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:33:32.15 ID:ubyRHWyfa.net] 時代遅れかどうかは知らんけど(そういうネトウヨチックな「俺スゲー」という間抜けな自己陶酔、俺は大嫌いだがw) 富豪的であってもそれが一時的(たとえばメソッドの中だけ)なら何も問題ないね。 その方がより簡潔だったり可読的に書けるなら否定する理由は何もない
576 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:36:42.05 ID:C5OiN+R5M.net] webのアクセスログとかもそんな事するのけ?
577 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:40:28.88 ID:ltR7ddTWM.net] 時系列データのリアルタイム処理とかどうやって一括で読み込むんだ??
578 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:41:56.46 ID:H/s4J3I+p.net] 巨大な高速RAMストレージを特注
579 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:46:48.35 ID:Dbb+UGxb0.net] 時系列的に増えていくファイルだとか、ソケット通信のバイトストリートだとかは順次読み込みするしかないよ。 だけどドライブにあるファイルは一括読み込みの方が簡単だよ。1ステップだからね。それをソートするなりデータ抽出するなりLINQ使えば簡単だよ。 それを知ってから逐次読み出しなんか面倒くさくアホらしくなったよ。
580 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:50:28.19 ID:Dbb+UGxb0.net] >>557 プログラム上に巨大な配列生成しても、それだけRAMに割り付けられると思うのは大間違いだよ。 メモリの階層化とかで勉強してね。
581 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:52:07.22 ID:ubyRHWyfa.net] >>557 には「高速RAMストレージ」って書いてあるけどw
582 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:52:33.25 ID:H/s4J3I+p.net] >>559 ストレージと書いてるだろw 外部記憶装置のアクセスの高速化しか考えてねーよw
583 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:56:24.93 ID:DGcX/y5w0.net] LINQのメリットの一つに IEnumerable<T>があるのになんで一括読み込みに拘るんや
584 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 21:57:36.33 ID:C5OiN+R5M.net] 痴性溢れる御意見ですね
585 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 22:00:34.70 ID:Dbb+UGxb0.net] 一括読み込みしたものがアイエニュメラブルになるから。
586 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 22:04:21.91 ID:Dbb+UGxb0.net] >>561 最近のパソコンは速いぞ。 試しにやってみなよ。
587 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 22:08:39.81 ID:ubyRHWyfa.net] まったく関係ないが、そういや、この手のデバイスって結局実用化せずに消えたのかね まったく聞かないな blog.livedoor.jp/dankogai/archives/50560934.html 読んだのずいぶん前とは思ったがもう12年前か...
588 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 22:31:50.96 ID:H/s4J3I+p.net]
589 名前:>>565 高速flash memoryでraid組んでもRAMの速度には負けるだろ。 [] [ここ壊れてます]
590 名前:デフォルトの名無しさん mailto:sage [2018/06/19(火) 23:13:11.27 ID:BrsQYlEtM.net] >>566 PRAMのSSD版ならもう出てる DIMMは今年度中にサンプル出荷のはず STTやRe、Mは頑張ってるがまだ先だろうね
591 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 11:21:29.65 ID:pxATIqrb0.net] Debug.Failのサンプルコードがこんなのなんですが プログラムのバグでもない限りは絶対に訪れないような場所には 片っ端からDebug.Failを撒いておいたほうがいいんですか? それともそれ専用のthrowすべき例外なりがあるんでしょうか? Assert.Fail? 何も書かないのは気持ち悪いので指針を教えてください switch (option) { case Option.First: result = 1.0; break; // Insert additional cases. default: Debug.Fail("Unknown Option " + option); result = 1.0; break; }
592 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:12:52.11 ID:DuFsc7dIM.net] >>569 そういうのはフロー解析による不要なコンパイルエラーを回避するために throw する 例外の種類は状況やポリシーに応じて InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException あたりを使うのが普通
593 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:29:34.73 ID:Yf6/X2v7M.net] これは標準で例外欲しくなるよなぁ いつも何を投げるか迷う
594 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:33:59.90 ID:G9vuY89la.net] そうかな >>570 が挙げてくれてるので十分でしょ。 少なくともメッセージは自由に設定できるし、本当に必要なら派生もできる。 そもそも例外をそんなに細かく分類する必要が本当にあるのかちょっと疑問
595 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:40:32.20 ID:M/oLTPjda.net] 常識的にキャッチされない種類の例外なら何でもいいわな InvalidOperationExceptionだけはキャッチされる場合があるから微妙だけど、慣習的にはわりと多数派な気がする 個人的には常に NotImplementedException にしたい
596 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:46:36.42 ID:9dNJX3N0M.net] NotImplementedは使わないなぁ
597 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 12:58:28.80 ID:G9vuY89la.net] NotImplementedException は↓の人の意見だと本当は実装すべきなのに何かの都合でまだ 未実装の場合に使うらしいね。正しいかどうかは知らない yfakariya.blogspot.com/2011/07/blog-post.html 同じNotでもNotImplementedは「未」実装、NotSupportedは「非」サポートってのは分かりづらいっす
598 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 13:00:29.11 ID:5ya7SPIm0.net] 細かいけどコンパイルエラー回避のためにthrowする、ってのは違くない? 現実問題そんな感じになってしまうことはあるけど理想はコンパイラの都合に合わせたコードなんて無いほうがいいんだから
599 名前:568 mailto:sage [2018/06/25(月) 13:23:21.50 ID:vUyRGEqk0.net] >>570 >InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException これらの例外は自クラスには非はなく、呼んだ側の使い方が間違っているといった感じの例外に見えますが そんなにこだわらなくていいんでしょうか public class MyClass { public class BugException: System.SystemException{} public void buggedmethod() { ... throw new
600 名前:BugException(); } } これで良ければ1行で定義できて1番明快に思えますが 検索してもこんなことをやってる人は誰もいないっぽい… [] [ここ壊れてます]
601 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 14:49:07.56 ID:o35Q9ijAM.net] >>575 >>569 のケースに限れば、defaultに来るのはenumにメンバを追加したのにcaseを追加していない「変更漏れ」であると考えることもできるから、 NotImplementedException でも意味的におかしくはない NotSupportedExceptionは(継承の都合で)メンバ自体が使えないことを意味するからちょっと違う
602 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 18:07:26.16 ID:dM1+XD4cM.net] MissingCaseException を自作でいいのでは?
603 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 18:51:31.43 ID:uZsljbpsa.net] >>578 なるほどそうかも 関係ないけど、いつも思うけどあるインターフェイスを継承してるのに そのインターフェイスのメソッド使ったらNotSupportedExceptionが飛んでくるって設計は なんか不条理を感じるのは俺だけかなあw インターフェイスって契約じゃなかったのかよw
604 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 19:32:38.95 ID:gMkOZD8Wa.net] InvalidEnumArgumentExceptionは?
605 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 19:39:55.82 ID:gMkOZD8Wa.net] 実装側の問題なら>>578 でよさそう
606 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 20:13:43.81 ID:HTnjHonAM.net] >>570 が挙げてる例外は各々意味あるから>>569 のとはちょっと違う気がする AssertExceptionとかLogicErrorExceptionとかが欲しい
607 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 21:43:12.62 ID:xJKhLBIA0.net] Debugクラスのメソッドはリリース版のとき消えます、素通りします Debug.Fail() は起こりえない状況であり、かつ、素通りしても問題ない箇所、 またはリカバリ処理を行っている箇所にしか使用できません 基本は例外か Trace.Fail() を使用するべきです Debug.Fail() を使用して問題ないのは具体的には下記の条件に当てはまるときぐらいだと思います ・『絶対』に起こらないことを目視や単体テストで確認した上で、後続のコードでリカバリ処理を行っている箇所で、 開発によってコードが壊れてないかチェックするためにコードに挿入する (絶対に発生しないので単体テストを行う場合は #if で慎重にコードを切り替えてエラー状態を再現することになります) つまり、リカバリ処理してるなら Debug.Fail() は入れなくても問題ないはずです
608 名前:568 mailto:sage [2018/06/28(木) 16:32:42.98 ID:mhaIhaYV0.net] 遅くなりましたが例外とログの使い方大変参考になりました。 ありがとうございます。
609 名前:デフォルトの名無しさん [2018/07/04(水) 22:15:33.33 ID:gFgZc5FG0.net] 81F
610 名前:デフォルトの名無しさん [2018/07/05(木) 22:48:00.22 ID:bXohcl5rE] C#的にはこういうプロジェクト構成(VisualStudio)が正しい! という考えたがある方、詳しく教えてほしいんですが、 スレ違いでしょうか?
611 名前:デフォルトの名無しさん mailto:age [2018/07/11(水) 23:46:27.39 ID:wZEnBA6P0.net] 隔離用のスレとはいえ下がりすぎなので上げとく
612 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 02:43:18.10 ID:VF8Jnm1rH.net] 超初心者ですが RectangleとかPointとかって、値型? 値型ってコンストラクタに引数渡せないって、さっき、読んだけど
613 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 20:29:08.90 ID:LFvEI7az0.net] >>589 初心者ですが そいつらは値型でつ 値型は無引数のコンストラクタにコードを書くことができないんでなかったかいな?
614 名前:デフォルトの名無しさん [2018/07/12(木) 21:32:30.73 ID:wWmeulvip.net] 単なる構造体にインスタンスもくそもないからな。
615 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 09:57:07.24 ID:AoeZKvgvM.net] 構造体は初期化が0フィルだから フィールドが非null値の場合はどうなるのかはしらない
616 名前:デフォルトの名無しさん [2018/07/14(土) 10:59:20.35 ID:21Pqhes0M.net] 型
617 名前:のデフォルト値でね? [] [ここ壊れてます]
618 名前:デフォルトの名無しさん [2018/07/14(土) 11:24:43.76 ID:td9rD4BU0.net] Visual Studio 2017 合計 90 日間が過ぎました。 無料で使いたいんですが、どうすれば良いでしょうか?
619 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 11:27:35.51 ID:trGcxTua0.net] 無料の使ってください
620 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 11:29:07.89 ID:1NIDWWGu0.net] 90日ってことは有償版だろ 大人しく買えよ もしくはCommunity版を検討する
621 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 11:36:04.11 ID:EtwCAyCb0.net] >>594 どうしても有償版を使い続けたいのなら期限が切れるたびにWindowsを再インストールすればOK
622 名前:デフォルトの名無しさん [2018/07/14(土) 12:06:05.24 ID:td9rD4BU0.net] Community版に移行する事にしました。 ありがとうございます
623 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 23:26:56.12 ID:mNPit/gT0.net] Communityって登録しないと期限とかなかったっけ
624 名前:デフォルトの名無しさん mailto:sage [2018/07/15(日) 01:08:37.15 ID:WCfEKFtx0.net] Microsoftアカウントを登録しないと30日
625 名前:デフォルトの名無しさん [2018/07/15(日) 11:14:40.73 ID:GMJtRfj30.net] サブスクリプションで全シリーズ揃えてる俺に死角無し。
626 名前:デフォルトの名無しさん mailto:sage [2018/07/22(日) 16:05:05.76 ID:bsqxWqeBM.net] >>601 VS-4.2くれ
627 名前:デフォルトの名無しさん [2018/08/02(木) 11:31:31.36 ID:ijDqx/PBp.net] Entity Framework Coreについて質問です。 以下のように1対多の入れ子(left join)になったデータを取ってくる場合で、一番最下層のテーブルに取得条件を追加したいです。 どのようにしてwhereメソッドを書けばよいでしょうか。 .Include(x => x.Departments) .ThenInclude(x => x.Groups) .ThenInclude(x => x.SubGroups) .ThenInclude(x => x.Employees) .ThenInclude(x => x.Skills) 例えば以下のような感じです。 Skill.ExpireDate >= DateTime.Today それぞれのプロパティはコレクションのため以下のようには書くことができません Where(x => x.Departments.Groups.SubGroups.Employees.Skills.ExpireDate >= DateTime.Today) ThenIncludeで指定しているプロパティがすべて列挙でなければ以下のように書けると思うのですが・・・ Where(x => x.Department.Group.SubGroup.Employee.Skill.ExpireDate >= DateTime.Today) それぞれの階層のクラスは全プロパティ取得することを想定しています。 Entity Framework Coreで実現可能でしょうか。
628 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 12:14:20.65 ID:jJXbX9Nfa.net] その条件ならテーブルを上からたどる必要はないのかと
629 名前:デフォルトの名無しさん [2018/08/02(木) 12:30:22.50 ID:ijDqx/PBp.net] >>604 辿らない場合、スキルクラス単位で条件絞り込みができるのでしょうか? これができればとても楽なのですが、、、
630 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 13:06:25.80 ID:CFW8XzdE0.net] どうしても上からたどりたいなら WhereとAnyで掘り下げていくとか SelectManyで平坦化するとかか
631 名前:デフォルトの名無しさん [2018/08/02(木) 15:11:34.29 ID:ijDqx/PBp.net] いえ、辿りたいわけではなくて、辿らないとできないと勝手に思ってただけです 辿らなくて良いなら辿らないでやれればベストです。 ですがその方法がわからないので教えてもらえませんでしょうか。
632 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 21:52:06.55 ID:nmSSZypj0.net] var q = _context.Hoges.FromSql($@" select H.* from Hoges H where exists ( select null from Departments D where H.DeptId = D.DeptId and exists ( select null from Groups G where D.DeptId = G.DeptId and exists ( select null from SubGroups SG where G.GrpId = SG.GrpId and exists ( select null from Employees E where SG.SGrpId = E.SGrpId and exists ( select null from Skills SK where E.EmpId = SK.EmpId and SK.ExpireDate >= {DateTime.Today} ))))) "); var hoges = q.Include(x => x.Departments) .ThenInclude(x => x.Groups) .ThenInclude(x => x.SubGroups) .ThenInclude(x => x.Employees) .ThenInclude(x => x.Skills) .ToList();
633 名前:デフォルトの名無しさん mailto:sage [2018/08/03(金) 07:33:44.44 ID:TQSHsawm0.net] 以下のコードはどういう内容なのでしょうか? public IList<float> Plus214_Output_0 { get; set; } 特に <float>、 { get; set; } が分かりませんでし
634 名前:ス 以下の一部になります https://github.com/Microsoft/Windows-Machine-Learning/blob/master/Samples/UWP/MNIST/src/MNIST.cs [] [ここ壊れてます]
635 名前:デフォルトの名無しさん mailto:sage [2018/08/03(金) 07:54:13.63 ID:/ayVy0z+a.net] >>609 前者は「ジェネリック」、後者は「自動実装プロパティ」でググれ
636 名前:デフォルトの名無しさん mailto:sage [2018/08/03(金) 07:55:39.91 ID:TQSHsawm0.net] >>610 ありがとうございます!めっちゃ助かりました!
637 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 20:55:48.43 ID:7nA6P5yg0.net] Linqでの書き方で質問なのですが 同じサイズのdataAとdataBのデータがあるとして データが違う箇所のIndexを取り出すとしたらどう書けば良いでしょうか? 今は↓のようなコードになっています。 List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 }; List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 }; bool resultAB = dataA.SequenceEqual( dataB); if(resultAB = false) { foreach(var A in dataA) { 比較処理 } } 結果 2 3
638 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:22:20.14 ID:UKw4EMmv0.net] >>612 ない頭絞って考えてみた。 Enumerable.Range(0, dataA.Count()).Where(p => dataA[p] != dataB[p]); やら dataA.Select((v, i) => new { value = v, index = i }).Where(p => p.value != dataB[p.index]).Select(p => p.index); どっちも汚い。もっと賢いのおしえろください
639 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:24:07.13 ID:ly4lPw5D0.net] lLINQでやらんとあかんのかなんなのか
640 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:29:04.18 ID:BzL1Bfeb0.net] こういうのってforで一つずつ比較するのが一番読みやすくて楽じゃね?
641 名前:611 [2018/08/07(火) 21:35:47.39 ID:UKw4EMmv0.net] 無理矢理LINQつかってみたけど>>615 に一票
642 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:36:11.45 ID:q6HoXiPg0.net] >>615 俺もそう思う。他の処理が入ってもすぐに組み込めるし Linqは可読性がメリットなんだから、わかりにくくなったら本末転倒だし あくまで個人の感想です
643 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:41:47.05 ID:7nA6P5yg0.net] dataAとdataBが1000件以上あるので、まず単純に変更してるのがあるか?で SequenceEqualを使ってみた流れでLINQを調べていた流れで知りたかったです。 forで書くのがわかりやすいとは思うけど、LINQでもっとうまく書けるかなと思って >>613 参考になりました。ありがとうございます!
644 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 21:43:44.13 ID:5i41CNK00.net] for では、比較されるレコードが送られてくるけど、 LINQ では、答えしか送られてこないから、効率的
645 名前:デフォルトの名無しさん [2018/08/07(火) 23:11:20.30 ID:EHUuk9/6a.net] zip使えばいいんでね?
646 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 23:26:49.96 ID:WUtnzCvr0.net] Linqのほうがわかりやすいし、ソースがランダムアクセスできるとも限らんだろ シーケンスを束ねてインデックス振って比較して違うやつだけ取り出してインデックスを取り出す Linqなら思ったことをそのまま書けばいい IEnumerable<int> Hoge<T>(IEnumerable<T> a, IEnumerable<T> b) { var comp = Comparer<T>.Default; return a.Zip(b, (x, y) => (x, y)) // シーケンスを束ねて .Select((e, i) => (i, e.x, e.y)) // インデックス振って .Where(e => comp.Compare(e.x, e.y) != 0) // 比較して違うやつだけ取り出して .Select(e => e.i); // インデックスを取り出す } ループじゃぱっとみ何やってるかわかんねえよ
647 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 23:31:30.75 ID:kuothdai0.net] あくまで個人の感想だけど。 自分も >>621 みたいなのの方が分かりやすいなあ。 てか、そういう書き方をよくするというか。
648 名前:デフォルトの名無しさん [2018/08/07(火) 23:35:51.16 ID:vAj7NH
] [ここ壊れてます]
649 名前:SO0.net mailto: LINQってEntityFrameworkでしか用途なくねえ? [] [ここ壊れてます]
650 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 23:37:10.34 ID:9e6mZaIW0.net] >>623 は?
651 名前:デフォルトの名無しさん mailto:sage [2018/08/07(火) 23:40:05.44 ID:ly4lPw5D0.net] >>623
652 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 00:39:26.55 ID:cXv1v5r0a.net] >>621 うーん、普通にこっちのほうが分かりやすいと思うけどw 別にLINQ否定派じゃないよ IEnumerable<int> GetIndices() { List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 }; List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 }; for (int i = 0; i < dataA.Count; i++) if (dataA[i] != dataB[i]) yield return i; }
653 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 03:30:51.92 ID:x4iNladl0.net] Zipしたものをforeachで回すのが一番自然 IEnumerable<int> Hoge(IEnumerable<int> A, IEnumerable<int> B) { var i = 0; foreach (var eq in A.Zip(B, (a, b) => a == b)) { if (!eq) yield return i; i++; } } 自分はやらんけどLinqならこう dataA.Zip(dataB, (a, b) => a == b).Select((eq, i) => eq ? -1 : i).Where(i => i >= 0);
654 名前:611 mailto:sage [2018/08/08(水) 05:09:02.93 ID:9ryRYesD0.net] Zip知らんかったわー。超参考にする。
655 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 13:38:09.59 ID:CtU8HUVGd.net] インデックスが必要な時、わざわざselect挟んでインデックス貼るの馬鹿らしい感じがして好きになれないんだけど仕方ないよね? そんなにインデックスを参照することが多いなら生成時に一緒に貼っとけって話かもしれんが… そもそもlinqマスターはインデックスを必要としない設計にいつもなるの? 自分もインデックスが無くて済むように考えるけど結果的に必要になる箇所が細部で出てくるんだよね
656 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 14:08:00.53 ID:csO2M6exd.net] どうしても必要な時はselect((value, index) => new {V = value, I = index})でインデックス引っ張ってるわ それでもインデックス欲しい条件1行で書けるのが楽だからLinq便利派だけども
657 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 14:25:20.52 ID:CtU8HUVGd.net] >>630 俺もそれ、ちょくちょくするんだけどforで回したほうがよくね?って思っちゃうことがあるんだよね もちろん処理によりけりと言ってしまえばそれまでなんだけど 比較するようなもんじゃないかもしれんがjavascriptなんかだと大抵インデックス取れるから、そっち触ったあとにC#に戻ると処理考えるときにインデックスありきで考えがちになっちゃう気がしてる
658 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 14:32:55.42 ID:CtU8HUVGd.net] 先に出てた課題でもzipしたあと、そのままlinqで処理を完結させるか、zip後にforで回すか 個人的にはzipがどちらにせよ入るなら最後までlinqの方が1つの処理を1つの手法で解決してる感じがして好き だけどインデックスが処理に必要だからfor使いたいって気持ちもわかる
659 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 14:53:36.93 ID:bbTjp3FCd.net] >>631 まぁforのがいいと感じるならそれでもいいんじゃないかな 複雑な処理しない限りは大体Linqのがスッキリするからそうしてるだけだし
660 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 15:07:53.10 ID:x4iNladl0.net] こういう拡張メソッド作っておくのはたまにやる public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> self, Func<T, bool> predicate) { var i = 0; foreach(var s in self) { if(predicate(s)) yield return i; i++; } } dataA.Zip(dataB, (a, b) => a == b).WhereIndex(eq => !eq); 拡張メソッド嫌いな人もいるだろうけど一番読みやすい わざわざSelectでインデックスつけてる冗長さもないし、添字アクセスもないし、使う時はすっきり意味がわかりやすい
661 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 16:44:49.34 ID:Gn4Y43YUM.net] >>634 正直クソ分かりにくい 俺がレビューしたらリジェクトするわ WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する そもそも
662 名前:メソッド名以前に、LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、 キーやインデックスの方を返すような操作については特に念入りにそれがわかるような明示的な表記になるように工夫したほうがいい [] [ここ壊れてます]
663 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 17:02:43.62 ID:0wIwbQiXM.net] SelectIndexWhere()ならどうか。英国紳士にも通じると思う
664 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 17:20:32.65 ID:o48M+fLoM.net] SelectWithIndexやな
665 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 17:26:15.62 ID:icN1uiHAa.net] SelectIndexFilteredByValue これでもパッと見 ? となる人は多そう
666 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 17:40:49.62 ID:Uqgxm++Va.net] >>636 IndicesWhereで十分でしょ Selectはいらんと思うw メソッドなのに動詞じゃないのはおかしいって言ったって、組み込みのWhereだってそうだ まあスレ違いだね。
667 名前:デフォルトの名無しさん mailto:sage [2018/08/08(水) 18:11:22.97 ID:ucfZkVugd.net] >>639 誰が動詞じゃないとおかしいって?