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

レス数が1000を超えています。これ以上書き込みはできません。
2020/12/16(水) 11:29:35.35ID:TSvQ057dM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/03/19(金) 13:07:40.64ID:HbCpBKgza
メンタルモデル(笑)とか進化論モデル(笑)とか言い出すと
昔のJava界隈みたいな胡散臭さが出てくるなw
2021/03/19(金) 13:18:48.59ID:HbCpBKgza
まあ特定の機能を担う仮想的な装置(オブジェクト)に分割統治するのは
人間の脳というか認知能力の都合だというのはその通りだけどね。

繰り返しになるけど、重要なのはその「特定の機能を担う仮想的な装置」を
クラスで表現できることになったことなんだよね。

アルゴルズムの教科書に出てくるようなデータ構造はオブジェクト指向が提唱される前からあった。
画期的だったのは、それらをQueueとかDictionaryとか言ったまんまの名前を付けたクラスで書けるようになったこと。
2021/03/19(金) 13:31:05.56ID:Jtw21w2UM
昔あったJavaの月刊誌はやたら哲学用語を多用する記事とかあったな
2021/03/19(金) 13:40:56.61ID:Oem/eeea0
ニューロマンサーっぽく解説して
2021/03/19(金) 14:04:48.51ID:Qsi2J9ai0
世の中では「部品化」と言う、もう少し判りやすい言い方を使っているんじゃないかな
2021/03/19(金) 14:05:45.45ID:pO9QgyHvM
double[] real; double[] imag;でもってる値をComplex[] compへの変換を1行できれいに書けないでしょうか?
comp[0] = new Complex(real[0], imag[0])を配列に対して操作できればかけそうな気がするのですが、LINQとかで表現できますか?
2021/03/19(金) 14:20:19.54ID:gG/OqDxy0
>>957
var comp = real.Zip( imag, ( r, i ) => new Complex( r, i ) ).ToArray();
2021/03/19(金) 14:25:33.56ID:ysVgQ22g0
>>956
部品が関数でもいいよね?
2021/03/19(金) 14:28:10.86ID:pO9QgyHvM
>>958
ありがとうございます。
Linqにzipなんてものがあったんですね。
2021/03/19(金) 21:21:23.14ID:vK2IShGtM
ひょっとしなくても>>933のも
var hoge = array_A.Zip(array_B, (a, b) => new float[]{ a, b }).ToList()
でいけたのか

でもこれだったらちょっと冗長でも
var hoge = Enumerable.Zip(array_A, array_B, (a, b) => new float[]{ a, b }).ToList()
って書きたいなあ
2021/03/19(金) 21:30:14.38ID:vK2IShGtM
あ間違えた
var hoge = Enumerable.Zip(array_A, array_B, (a, b) => (a + b) / 2).ToList()
2021/03/19(金) 22:55:51.95ID:dz1o2wrK0
まだ間違ってる
2021/03/21(日) 08:33:37.34ID:O9O05/ov0
class OrderにはItemCodeとQuantityがあり、
List<Order> order1とorder2をまとめたいです
具体的にはItemCodeが同じならばQuantityを合計し、なければ新たに追加する、といった具合です
foreachを使えばできますが、Linqを使用して簡潔に書ける方法があれば教えてください
965デフォルトの名無しさん (ブーイモ MMcb-vxZl)
垢版 |
2021/03/21(日) 09:25:40.37ID:ai+yXZclM
ConcatしてitemCodeでGroupByしてSum
2021/03/21(日) 12:14:40.89ID:hh+THzL2M
>>965
ありがとうございます
今出先なのでまた帰ったら試してみます
2021/03/21(日) 18:29:47.64ID:O9O05/ov0
>>965
order1.Concat(order2).GroupBy(o => o.ItemCode).Select(x => new Order() {ItemCode = x.Key, Quantity = x.Sum(y => y.Quantity) });

こんな感じですか?
2021/03/21(日) 21:15:46.56ID:B8RMscJD0
>>967
こういうの現場でたまに見かけるけど、とても完結だとは思えない。
加算メソッドをOrderクラスに実装するべきだと思う。
2021/03/21(日) 21:28:25.98ID:rOmbGrT+0
え、簡潔と完結を書き間違えたんでしょ?
違うのかな…
2021/03/21(日) 21:56:25.09ID:S+S4XTWp0
>>967
こんなの書いてはいけませんっていういい見本
2021/03/21(日) 22:19:00.23ID:B8RMscJD0
>>969
誤字ですね。簡潔です。
2021/03/21(日) 22:31:46.08ID:S+S4XTWp0
>>967
こんなの現場で書くとどう扱われるか教えてやろうか?

○○さんの書くプログラムはわかりやすいけど
君のはわかりにくいね
読みにくいっていうか
これはどういう処理をしてるの?
仕様を書いてほしいんだけど
文章で書けなかったら
普通の.net2.0ぐらいの機能で書いてくれないかな?
それと○○さんと比べて進捗も遅いよね?
こんな書き方してるからじゃない?
あと処理経過がわかるログも出してほしいんだけど
この書き方のままじゃ出せないでしょ?

とかね
目立つことしないほうがいいよ
2021/03/21(日) 22:43:13.77ID:ejnWrGNOa
長いメソッドの途中でいきなりこれが出てきたら気持ち悪いけど
OrganizeOrdersとか名前つけてメソッドに切り出すなら許せるかな
正しいメソッド名は英語ネイティブに聞いて
2021/03/21(日) 22:47:23.75ID:4uqTNWnz0
>あと処理経過がわかるログも出してほしいんだけど
これは流石に設計書いた奴が無能すぎるわ
2021/03/21(日) 22:48:14.21ID:ejnWrGNOa
>>972
それほぼ全部カウンター食らうから気をつけたほうがいい

わかりにくい→感覚でしゃべるな、コードメトリクス測定したらLinqのほうが成績良い
どういう処理をしてるの→見たまんまorder1とorder2を繋いでItemCodeでグループ化してQuantityの合計を計算しtwる
使用を書いてほしい→↑が仕様
普通の.net2.0で書く→古い言語仕様に合わせる理由がない
進捗→状況次第
2021/03/21(日) 22:49:08.96ID:ejnWrGNOa
ログ出して→この程度の処理でいちいちログ出したらログが汚れるしパフォーマンスも悪化する
2021/03/21(日) 22:54:55.17ID:gB+oqGaT0
>>967
これってそんなに読みにくい?
自分も他の人もこのくらいなら普通に書くけど。
どうしてもなら、各メソッドの間に改行入れて各行ごとに処理内容のコメントを書いてもいいし。

こう言うのでログを出して欲しいって要望を受けたことはないけど自分でそれ用の拡張メソッドを書けば出せないこともないし。とか言ってみる。
2021/03/21(日) 22:58:09.33ID:S+S4XTWp0
>>975
いいよ別に
後はリアルで味わったらいいよ
みんな暖かく接してくれるよ
2021/03/21(日) 23:16:39.83ID:O9O05/ov0
>>967です
たくさんのレスがついていてビックリしています
書いていて思ったのは>>977さんがいうように各メソッドの間に改行を入れればまだ読みやすいと思ったのと、
Orderのプロパティが多いようだとどんどん読みづらくなっていくな、と思いました

foreachで書いたのはこんな感じですが、よりいい方法があれば知りたいです
var allItem = new List<Order>(order1);
foreach (var o in order2)
{
var duplicate = allItem.FirstOrDefault(x => x.ItemCode == o.ItemCode);

if (duplicate is null)
allItem.Add(o);
else
duplicate.Quantity += o.Quantity;
}
2021/03/21(日) 23:21:28.52ID:O9O05/ov0
>>979
最初にvar allItem = new List<Order>(order1);をしていますが、
duplicate.Quantity += o.Quantity;をするとorder1の内容も更新されてしまいますね
DeepCopyなどで複製するべきでした
2021/03/22(月) 00:13:51.82ID:dAcW2Slk0
>>971
質問者も簡潔と完結を間違えてるんじゃね?ってダブルの冗談さ
2021/03/22(月) 00:23:14.95ID:0zPdt/v20
C# Seleniumでブラウザを閉じるときに

Quit();
Close();

の動作が最近のChromeのアップデートでかなり遅くなっています。
私だけでしょうか?
983デフォルトの名無しさん (ワッチョイ 8bbb-Q5Cn)
垢版 |
2021/03/22(月) 01:09:40.25ID:RQGm3cmd0
>>967のコードは、ドットで改行したらいいぐらいでなんも悪くないだろう
984デフォルトの名無しさん (ブーイモ MM4d-vxZl)
垢版 |
2021/03/22(月) 02:12:24.15ID:GLNo6tkcM
ちゃんとしたテストコード書いてあるなら967のでかまわん
2021/03/22(月) 02:17:21.58ID:1s/2BcbO0
ログもちゃんと出力してね
指摘する人間に粒度が依存するけど
少なくとも俺はこんな一括でやられたらどこがバグってるのかわからない
2021/03/22(月) 02:21:02.72ID:1s/2BcbO0
まあ、もっとも指摘する人間の粒度に依存する部分に対応できない処理を書いちゃうあたり優秀とは程遠いというのが俺の感想だがね
2021/03/22(月) 03:06:05.30ID:ElndWJoU0
この程度のコードが理解出来ないで文句垂れてるとか恥ずかしくないのかな
足を引っ張りあって低い方に合わせて仲良くってのが日本のITで
生産性の低さに表れてるのだろうな
2021/03/22(月) 07:03:59.88ID:IJYAylQJM
これが読みにくかったら、簡単なSQL文すら書けない&読めない現場
20年前の現場ではSQLでとってきたレコードをループしながら集計しているコードがゴロゴロあった
2021/03/22(月) 07:27:03.21ID:68S3N7MUM
C#3.0リリース直後でLINQがまだ物珍しかった頃なら>>972の指摘もまあ分かるけど
C#の最新バージョンなんてもう9.0だぜ?
LINQだって10年くらい前の時点で十分スタンダードになってた技術なのに
いまだに真顔で>>972みたいな指摘する人がいるのか・・・・

>>985
>少なくとも俺はこんな一括でやられたらどこがバグってるのかわからない
え、この程度で分からないの?
「優秀とは程遠い」理解力しか持ち合わせてないのはあなたのほうじゃ
あなたの口ぶりベテランの人なのかと思ってたんだけどただの能力低いロートルだったりする?
2021/03/22(月) 08:20:54.66ID:IJYAylQJM
うちにもLINQ読めないからやめろ!って言うおっさんがいたな
最初年長者の言うことだからと素直に聞いていたけど
だんだん腹立ってきてボロカスに言ったら何も言わなくなった
2021/03/22(月) 09:33:10.92ID:1s/2BcbO0
>>989
あっそう
じゃ途中経過のログ出してよ
2021/03/22(月) 09:36:15.54ID:1s/2BcbO0
君のプログラムは
たったこれだけ、
ホントこれっぽちの、
普通のプログラマなら本当に誰でも可能な、
ことすらできないゴミカスなので


対応できませーん!(笑)(´∀`*)ウフフ
2021/03/22(月) 09:44:59.10ID:1pgrqUSA0
>>989
>>972の指摘は技術的な無知から真顔でやってるんじゃないよ。

和を乱すなら撤退しろ、ってメッセージなんだから、技術論で正しいって言っても無駄なんよ。

これが正しいってコンセンサスを先に取れば誰も何も言わない。
実際に工数が下がることを証明して、パフォーマンスが落ちていないことを証明して、コーディングルールにLinqの使い方を明示して、やってはいけない使い方なんかも書いて、それで通すもの。
俺は使いたかったからそうして通したから間違いない。

引っ張り合いではなくて、皆のレベルを上げる必要があるの。
一人が踊り狂っても、そいつが辞めたときに誰も面倒が見れない物が残るだけ。
おっさんになってからつくづく思うけど、お前らほんと自己中だな。
2021/03/22(月) 10:00:26.34ID:1s/2BcbO0
>>993
え?なんか長いけど延々と誰でもできることを自分ができない正当性を長文使って説明してるの?( ´,_ゝ`)プッ

控えめに言って

クソダッセw
2021/03/22(月) 10:02:49.77ID:1s/2BcbO0
と思ったら内容違うじゃん
はじめの一文で立場を明確にしろよ
2021/03/22(月) 10:18:56.38ID:e3BAbY2z0
>>991
途中経過をログ出力したければ普通にできるけど・・・
2021/03/22(月) 10:37:03.10ID:qAoMyjOy0
>>995
クソダッセw
2021/03/22(月) 10:39:26.64ID:1s/2BcbO0
>>996
ほう、やってみろ
2021/03/22(月) 10:41:32.69ID:1pgrqUSA0
>>994
ちゃんと読まないとかそういうところもだぞ。
2021/03/22(月) 10:54:40.38ID:NnPBdii70
>>1000なら俺は今年株で大儲けする
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 23時間 25分 5秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況