ふらっと C#,C♯,C#(初心者用) Part135
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part134 http://mevius.5ch.net/test/read.cgi/tech/1511951038/ ■関連スレ C#, C♯, C#相談室 Part95 http://mevius.5ch.net/test/read.cgi/tech/1508180530/ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■コードを貼る場合は↓を使いましょう。 http://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx http://referencesource.microsoft.com/ VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured var list_hoge = new List<Data_hoge>() { new Data_hoge(){Key="1",Value=22 ,Flag=true}, new Data_hoge(){Key="2",Value=23 ,Flag=true}, new Data_hoge(){Key="3",Value=24 ,Flag=false}, new Data_hoge(){Key="4",Value=23 ,Flag=true}, }; この様なデータがあったときKeyに相当する引数(int=1〜4)を入れると Flagがtrueのものの中でvalueが最大値を取るならtrueを返すメソッドを作りたいのですが どうすればいいでしょうか? LINQだと嬉しいです public bool saidaichidesu(int x) { var list_hoge = new List<Data_hoge>() { new Data_hoge(){Key="1",Value=22 ,Flag=true}, new Data_hoge(){Key="2",Value=23 ,Flag=true}, new Data_hoge(){Key="3",Value=24 ,Flag=false}, new Data_hoge(){Key="4",Value=23 ,Flag=true}, }; var flaggedList_hoge = list_hoge.Where(data => data.Flag); if (flaggedList_hoge.Count() > 0) { var maxValue = flaggedList_hoge.Max(data => data.Value); この先どう書けばいいかわからない } return false; } 最大値を持つ要素の中でKeyがxと一致するものを返したいということ? 最大値をもっているもののkey(複数あり)がxと一致するかどうかを確認して、一致するならtrueを返したいです keyがstringになっていますがこれをintにしても構いません 寧ろ多くの人は解らんと思うが、、、先ずは質問の意味が正確に解るかどうかだな。 それが最大の問題だ。 「質問はすでにその中に解を含んでいる」、質問者が質問を正確に組み立てられないのは質問者の 責任として放置される性質のものではなくて、回答者の技量によって正確な質問に 組み立て直す。これは頭のいい回答者の責任になる。 でその役割りが君というわけだ。 saidaichidesu(1) −−> False saidaichidesu(2) −−> true saidaichidesu(3) −−> false saidaichidesu(4) −−> true saidaichidesu(その他) −−> false 上の例ではこういうリターンを期待してる? もしこうであれば簡単だよ。 class Data_hoge{ public string Key; public int Value; public bool Flag; } public bool saidaichidesu(int x) { List<Data_hoge> list_hoge = new List<Data_hoge>() { new Data_hoge(){Key="1",Value=22 ,Flag=true}, new Data_hoge(){Key="2",Value=23 ,Flag=true}, new Data_hoge(){Key="3",Value=24 ,Flag=false}, new Data_hoge(){Key="4",Value=23 ,Flag=true} }; var maxv = list_hoge.Where(dt => dt.Flag).ToList().Max(dt => dt.Value ); var res = list_hoge.Where(dt => dt.Value == maxv).ToList(); foreach (var dt in res) { if (x == int.Parse(dt.Key)) return true; } return false; } 苦戦した。w 一行では難しいな。もっといい方法があると思う。 たびたびお世話になります。 ラムダ式で作ったスレッドの優先度を変えるにはどのようにしたらよいのでしょうか。 Task sendTask = Task.Factory.StartNew(() => や ThreadStart action = () => で作成したスレッドです。 ThreadはいいとしてThreadPoolに優先度って設定出来たかしら? すみません、101ですが Threadだけでも良いです。 Taskは優先度の概念?がなさそうですね。 いつから初心者の質問に初心者が答えるスレになったんだ 厳しいことを言うようだけどコードレベルも一般に全然届いてない それは参考にならない >>104 手元に確認するための環境無いから試せないんだけど、作成したThreadStartデリゲートをThreadクラスに食わせてPriority プロパティを設定してスタートで行けるはず。 Thread.Priority プロパティは以下のリンクで https://msdn.microsoft.com/ja-jp/library/system.threading.thread.priority (v=vs.110).aspx >>90 なんかよー分からんけど、 public bool IsMax(string key) { var hogeList = new List<Data_hoge>() { new Data_hoge(){Key="1",Value=22 ,Flag=true}, new Data_hoge(){Key="2",Value=23 ,Flag=true}, new Data_hoge(){Key="3",Value=24 ,Flag=false}, new Data_hoge(){Key="4",Value=23 ,Flag=true}, }; var max = hogeList.Max(x => x.Flag ? Value :Int32.MinValue); return hogeList.Any(x => x.Fkag && x.Key == key && x.Value == max); } 試してないけどこんな感じでいける気が しかし、>>89 の日本語は酷すぎる 何を言ってるのかさっぱり分からない >>106 ありがとうございます。 確認してみます。 hogeList.Where(_hoge => _hoge.Flag).GroupBy(_hoge => _hoge.Value) .OrderByDescending(_group => _group.Key).First() .Any(_hoge => _hoge.Key == key) // 指定したキーのデータが最大値を持つか public bool hasMax(list<Data_hoge> list, int key) { // フラグが立っているデータの抽出 var flaggedList = list.Where(data => data.Flag == true); // リストの最大値 var maxValue = flaggedList.Max(data => data.Value); // 最大値を持つデータの抽出 var maxDataList = flaggedList.Where(data => data.Value == maxValue); // 指定されたキーのデータが存在するか var hasMaxValue = maxDataList.Any(data => data.Key == key); return hasMaxValue; } これは悪いソースですか?それとも普通ですか? 素晴らしい。よくわかる。良いソースリストの鏡。★★★★。 インデントがついていたらもひとつおまけした。 ★★★★ var max = hogeList.Max(x => x.Flag ? Value :Int32.MinValue); return hogeList.Any(x => x.Fkag && x.Key == key && x.Value == max); 評:素晴らしい。1行目のMinValueの使い方がおもしろい。工夫があってなお且つ分かりやすくシンプル。 ★★★★ return list_hoge.Where(_hoge => _hoge.Flag).GroupBy(_hoge => _hoge.Value) .OrderByDescending(_group => _group.Key).First() .Any(_hoge => _hoge.Key == xKey.ToString ()); 評:Keyでオーダーしたら絶対に動かないだろ。w と思ったが念のため試してみたら動いた。 _group.KeyのKeyは実はValueをKeyにしてグループ分けしているのでKeyはHohgeのKeyではなくて HogeのValueと同じになる。初心者には難解過ぎるので★一つ減らす。 レーティングスレになってるしw >>111 ネタの人っぽいけど、それは普通にいろいろ悪いw 一番の害悪はコメント。 //0〜9までの配列 var array = Enumerable.Range(0, 10).ToArray(); これと同じようにラベルのリストをつくりたいのだが、うまく行かない。どうしたらいい? こんな感じだとおもうんだが。 List<Label> lblList = Enumerable .Range (0,10).Select (d => new Label (){ Text = d.ToString ()}); >>116 お前は一年間Linqを使わないで普通にコード書け Linq使うと上達から遠ざかる 馬鹿な初心者の例 エラー内容を読まない 質問するときも上手くいかないなどあいまいな言葉しか使わない みなさんありがとうございます 全部参考にさせて頂きます anyの使い方を知りませんでした 初心者的には>>111 が一番わかりやすかったです 私の書いたコードを流用してくれているからだと思いますが 他の例の様にエレガントなコードを書けるように精進します private void test3() { List<Label> dev=Enumerable.Range(0, 10).Select(d=>new Label() { Name="Label" + d.ToString() }).ToList(); List<string> strdt=Enumerable.Range(0, 10).Select(d=>"--" + d.ToString() + "--" ).ToList(); dev.Zip(strdt, (x, y)=> x.Text=y); Debug.Print("--------------------------------"); foreach (var a in dev) { Debug.Print(a.Name + ":" + a.Text); } } これが動かない。同じ単純なアレイどおしなら問題なく動くと思うが、この場合は 色々やってみたがわからない。ZIPの後にForeachをかけるという 意見があったが、どうやって? マージした後にForeachかけるにはベクトルのコレクションを 返す必要がある。その方法が分からない。 以下のコードを実行すると array[index]へのアクセスで out of range exceptionがでます 何故index==numItemsという状態が起こるのでしょうか? for (var i = 0; i < numItems; i++) { task[i] = new Task(() => { var index = i; foreach () { array[index]にアクセス } }); task[i].Start(); while((int)task[i].Status < (int)TaskStatus.Running) { Console.WriteLine(i+"\t"+task[i].Status); } Console.WriteLine(i + "\t" + task[i].Status); } >>121 何がしたいの? 動かないって言われてもエスパーじゃないんで... っていうか、 >dev.Zip(strdt, (x, y)=> x.Text=y); ここのラムダ式の戻り値はyになるんだけど、これは意図してるのか勘違いなのか... >動かないって言われてもエスパーじゃないんで... int count = 0; dev.ForEach(x => x.Text = strdt[count++]); やりたいのはこれと同じこと。これは動作する。 >>dev.Zip(strdt, (x, y)=> x.Text=y); >ここのラムダ式の戻り値はyになるんだけど、これは意図してるのか勘違いなのか... ここの意図はdevがLabelのコレクションだからxはそのラベルの一個を取り出す。 yはsrtdtがstringコレクションだからyはその一つの要素 x.Text=y はラベルのテキストにストリングyを代入すること。 ラムダ式の戻り値はyになるんか? でもラベルにyをセットするのが目的だから戻り値は関係ないはず。 var retval = dev.Zip(strdt, (x, y) => x.Text = y); Debug.Print("--------------------------------" + retval); foreach (var a in dev) { Debug.Print(a.Name + ":" + a.Text); } 戻り値をretvalに入れてプリントしたらこんなになってる。 --------------------------------System.Linq.Enumerable+<ZipIterator>d__61`3[System.Windows.Forms.Label,System.String,System.String] Label0: Label1: Label2: Label3: Label4: Label5: Label6: Label7: Label8: Label9: -------------------------------- Label0:--0-- Label1:--1-- Label2:--2-- Label3:--3-- Label4:--4-- Label5:--5-- Label6:--6-- Label7:--7-- Label8:--8-- Label9:--9-- これが期待値 >>125 だったら最初からこれでいいのでは?知らんけど List<Label> dev=Enumerable.Range(0, 10).Select(d=>new Label() {Name="Label" + d,Text = String.Format("--{0}--", d)}).ToList(); 質問する前にもうちょっと自分で頭使って考えた方がいい気がするw なぜか専用ブラウザから書き込めなかったのでChromeから書き込んだけど、 これだけでワッチョイって変わるんだね知らんかった ここ数日の流れでわかったと思うけど 自前のアプリが完成するまでずっとこの人は何かコード書くたびに質問してくると思うけど それでいいのかな? 質問じゃなく承認欲求のための報告 連続してどうでもいいことまで書き込んだり質問する 今までも割といたタイプ >>128 今は補完文字列が使えるんだったね... 最近コード書いてないからもう忘れてた >>115 ネタじゃないです(>_<) ダメな点を教えてください(>_<) >>131 ウザいよね 目的の処理自体は作成できるくせに 聞いてくるなんてキチガイだよね >>134 横からだけど いくつか気になるところがあるけど とりあえず最後の二つの操作をよ〜く見て動作を考えてみたらいいのでは? var maxDataList = flaggedList.Where(data => data.Value == maxValue); var hasMaxValue = maxDataList.Any(data => data.Key == key); >>121 自分が言ったのはこういうことです(>_<) 匿名クラスを使ってます var marged = dev.Zip(strdt, (x, y) => {Label=x, Text=y}); marged.ForEach(item => item.Label.Text = item.Text); >>136 理解が目的なら挙動をテストするコード書けばいい どこかの記事をコピーして実行 そして徐々に変えていって仕組みを理解したらいい >>137 意図した動作にならないという意味でしょうか、それともひとまとめにできるという意味でしょうか(>_<) 後者の場合は、一行づつで簡単な意味しか持たないほうが良いと思いすべて分離したのですがまとめまくったほうが良いのでしょうか(>_<) >>134 ネタにしか思えんけどw コメントも余分な一時変数も可読性に寄与しないどころか悪くしかしてないと思う。 好みの問題じゃないと思うけどな こっちの方が読みやすいでしょ public bool hasMax(list<Data_hoge> list, int key) { var flaggedList = list.Where(data => data.Flag); var maxValue = flaggedList.Max(data => data.Value); return flaggedList.Any(x => x.Key == key && x.Value == maxValue); } >>141 ありがとうございます(>_<) 今後の基準にします(>_<) >>136 その割にZIPの本来の使い方してないじゃんw 意味が分からないよ もともと条件がふわっとしてるからまあ適当でいいよ 条件をつめて(keyがユニークなのかなど…)行くと普通こういうコードは書かないと思う >>141 元ネタからそうだけど、メソッドはパスカル記法(先頭大文字)で。 >>144 一行づつで一つの意味しか持たないレベルに分解するのはやりすぎということでしょうか(>_<) ありがとうございました。 >>145 確かにそうするべきでした(>_<) ありがとうございます。 >>136 ああついでに言っとくと、あなたはたぶん (1) 列挙を行うオブジェクトを返すこと (2) 列挙を行うこと この二つを混同してるんだろうね。 LINQは前者であって後者じゃないのよ。 匿名関数なんてパインソのリスト内包表記とかでイメージつかまないとムズいよ? それになぜそんなにリンクにこだわるのか いまの時代にカッコつけてスーツに肩パッドいれてる人みたい 要するにカッコつけかたミスってるよ >>146 深入りしなくてもいいけど そのコードともとの2行のコードは結果は同じだけど ロジックによる動きを追っていくと違いが判ると思う >>138 いい線行きました。!!! var marged = dev.Zip(strdt, (x, y) => new {lbl = x, txt = y} ); foreach (var aa in marged ){ aa.lbl.Text = aa.txt; } これで動作してますが、Foreachはmargedにメソッドがでてこない。 >>149 LINQは手続き型(?)よりも簡単で良いと思っていたのですが勘違いだったのですね(>_<) 参考にします(>_<) >>150 元の2行のコードというものが分からないです(>_<) すみません。 >>151 列挙型にForEachがないみたいですね(>_<) ごめんなさい(>_<) >この二つを混同してるんだろうね。 >LINQは前者であって後者じゃないのよ。 折角のアドバイスにきつい言い方と思うかもしれないが、抽象的な説明よりも具体的に説明をすると 初心者には分かりやすい。あなたにも初心者の部下が沢山いるとおもうがそういうことを心掛けた方がいいと思う。 一番具体的なのは正しいコードで示すこと。 二番目はキーとなる概念が入った間違ったコード。(実際には正しいコードを空で書くのは、ベテランでも難しいからね) 3,4,がなくて5が説教。w >それになぜそんなにリンクにこだわるのか リンクに拘ってるのはもちろん初心者に最も理解しやすいからで、Zipにとくに拘ったのは 二つのシーケンスを同時に回せないと、一方でForeachを使いながら、同時にカウンターを 回すという不細工なことになるから。 偉そうだな わからないのが偉いのかな? わからないのは自分の責任だと思うが 小学生の頃も学校の先生に文句言ってたんだろ 回答者に対して具体的にコードを書かないといけないと言い出す初心者 モンスター質問者 自分で手を動かして試して考えられないならコードを書く意味なんてない 永遠に誰かに書いてもらえよ ここでいくらコードを聞いても無駄だな ごちゃごちゃ言わずにスルースキルを鍛えろよ 最近はLINQコード書いたレスは全部NGブチ込んでる こいつの質問超つまんないし だいたい自分で作成できる処理について他人に質問するなんて気持ち悪いよ >>122 ですが自己解決しました。 Parallel.Forにしたら問題なく動きました。 >>167 .net4止まりの環境か? なぜasync/await使わないんだ? >>168 asyncとParallelは役割が違う Parallelはデータ並列の同期処理 >>170 TaskやめてParallel.Forにするなら意図通りに動作するし別におかしな処理ではないだろ awaitしたら逐次処理になっちゃうぞ 難を付けるとしたら、arrayの各要素に対する処理を並列化したいんだったらParallel.ForEachの方がいいな SVGを使いたくてNuGetからSVG2.3というのをインストールしたんですが これってマニュアルみたいなものはないんですか? とりあえずググってみて簡単な長方形とテキストは表示できたんですが どうやって覚えたらいいんでしょうか SVGが使いたいなら普通にSVGを勉強したらいいんじゃないの? ここでHTMLの書き方について質問されてるのと変わりない 一般論として使い方のわからないライブラリがあるならNuGetに書いてあるオフィシャルサイトに 飛んでそこから調べる 最終更新が3年前とかだったら捨てる Visual Studio Community 2017 を使って 特定のフォルダ「c:\hoge」以下のサブフォルダを列挙する UWPアプリを作ろうとしています。 IEnumerable<string> subFolders = Directory.EnumerateDirectories(@"c:\hoge", "*", SearchOption.AllDirectories); foreach (string subFolder in subFolders) { MessageDialog md = new MessageDialog(""); md.Content = subFolder; md.ShowAsync(); } とすると System.UnauthorizedAccessException: 'Access to the path 'c:\hoge' is denied.' とのエラーとなります。 しかし、対象フォルダをデバッグビルドされるフォルダ 「C:\foo\bin\x64\Debug\AppX」にすると思った挙動となります。 デバッグビルドされる以外のフォルダにアクセスできるようにするには どうすればいいでしょうか? ちなみに Visual Studio を管理者権限で実行しても変わりませんでした。 以上、お知恵をお貸しください。よろしくお願いします。 >>176 UWPはそういうもん セキュリティ上ユーザーに許可されない場所は基本的にアクセスできない 忘れたけどユーザーにフォルダピッカーで選ばせないとアクセスできない アクセスしたらその情報を保存する方法があって次回からそこは普通にアクセスできるようになる めんどくさいからUWPやPCLは触りたくない 初心者はUWPを避けたほうがいいと思う UWjP自体使われていないからこんな質問が出てくる これ以外にもめんどくさい仕様がてんこ盛り ある程度勉強が終わった後改めてUWPやったほうがいいよ 初心者が上手にアプリの状態を保存したりしつつ画面遷移できるとは思えない >>177 ,178,180,181 レスありがとうございます! 素直にフォームアプリで挑戦します。 >>172 後出しですいませんが 並列化したかった箇所は外部の特殊な装置へのアクセスで並列化した数だけドライバのインスタンス持ってます。 arrayとしましたが、最終的にはconcurrentDictonaryを使い装置からのデータをまとめています。 async await使ったことないのですが、 また調べてみます。 ところでそもそもの質問ですが、 >>122 のコードでtask内からループカウンタを参照した時にnumItems以上になるのでしょうか? >>174 スレチだったんですね ありがとうございました UWPの件をひっくり返してみてみると その他のプラットフォームのアプリは好きなところを読出し放題なんだよ >>183 whileのタスクの終了待ち?が機能してない だからタスクより先にi++が行われる可能性があるのでエラーの現象がでてる IsCompleteってプロパティがあるからそれを使うといいよ そもそも>>122 は別スレッドで実行しているだけで非同期実行になってないね 実行するとこんな感じ https://i.imgur.com/mxuCicn.jpg 既存のXMLを編集したい 編集したタグ以外の要素はテキスト表現を変えたくない どうしたらいいかな? コンペア取った時に編集した箇所以外も差分に含まれてしまい困ってる 1回DOMを経由してる以上仕方がないのかもしれないけどなんとかしたい ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる