ふらっと C#,C♯,C#(初心者用) Part148
レス数が950を超えています。1000を超えると書き込みができなくなります。
初めて.NETCoreで作ったんだけどビルドすると単純なコンソールアプリなのにexeのファイルサイズが170KBくらいあるのはどういうこと? >>900
ランタイムにあたる部分を内包しているから
無駄が多いとか思ってもMSがそう作っているんだからどうしようもない 最近覗いてみたソースがこんな風に都度新しく生成して返すようになってたんだけどさ
return new float3(l.x + r.x, l.y + r.y,...)
こういうのって直接フィールド書き換えるよりパフォーマンス良かったりするの? 生成したオブジェクトをどう使うか分からないから回答できません。
次の方どうぞ 値型だしどうせコピーするんだからどっちでもええやろ float3とやらがイミュータブルなclassとして設計されているんじゃないか? >>902
汎用化できる余地のためにそうしてるのでは?
値型という前提で話すと、確かにフィールド直接書き換えの方がコピー1回分減るはず(float x 3程度のサイズなら無視できるパフォーマンス差だけど)
ただしそれだとそのフィールド専用のメソッドになってしまう =を多用するような数学的な型で事情があって参照型にする必要があるなら
まともな頭の人ならイミュータブルにするよね 初学者です
visual studio 2019 comunityでコンソールアプリをつくって勉強しています
製品A 大部品α 小部品T
製品B 大部品β 小部品U
製品A 大部品β 小部品V
・・・
という対応表を読み込み、製品Aを入力したら1行目と3行目を返すプログラムを考えています
この例では列が3ですが、対象によっては2〜5など変わり
列も年齢だったり役職だったり地名だったりするため、Class Person のageやnameのような型を固定出来ません
List<List<string>>とstring型の入れ子Listを作りデータを入れることは出来たのですが
勉強でLinqを使おうとしたのですが、うまくとりだせずスタックしています
すべての行をstring連結して一次元配列にし、Containで対象を取り出し、
出力時に結合文字をsplitする、というやり方以外の方法を教えてください
ありがとうございます >>910
用途にもよるけど
とりあえず読み込む対象に応じた型を用意したらいいんじゃないの?
部品表を読み込むなら部品用の型に
従業員表を読み込むなら従業員用の型にする >>910
class 製品
{
public string 製品名;
public string 大部品;
public string 小部品;
public override string ToString() => $"{製品名} {大部品} {小部品}";
}
var item = new 製品();
item.製品名 = "製品A";
List<製品> list = new List<製品>();
list.Add(item);
製品名が"製品A"のものを取り出したいときはList<製品> listに対して
var result = list.Where(x => x.製品名 == "製品A").ToArray(); //これで製品Aだけの配列が返ってくる
プログラミング自体初心者なのであれば、Linqより先にforeach (var x in list) if (x.製品名 == "製品A") Console.WriteLine(x.ToString());
というループ+if文による原始的な判別の方から入ったほうが分かりやすいと思う
Linqはラムダ式やら遅延評価やら初心者には理解しづらい概念が多いから >>911
>>912
こんな時間にもかかわらずありがとうございます
やはりclass製品と対象にあったクラスを設計するのが王道なのですね
具体のプログラム指針まで示して頂き感動しました
早速ためしてみようとおもいます なんか優しい流れになっててワロタw
いや、5chもせっかく人が激減したんだからこういうのが普通の場所になってほしいよねそろそろ >>910
同じくビギナーだけど、こんなことがしたいんじゃないかって思った
目的:
1.表の1列目データを使って検索して、マッチした行データの1個目と3個目を返す
2.列数の異なった表に対応したい
3.多次元のListでLINQを使いたい
違ってたらすんません
//2次元のListを作る(適当)
var list = new List<List<string>>();
list.Add(new List<string> { "A", "a", "1" });
list.Add(new List<string> { "B", "b", "2" });
list.Add(new List<string> { "C", "c", "3" });
Console.Write("製品名を入力してください(A,B,Cのいずれか):");
var searchWord = Console.ReadLine();
var result = list.Where(x => x[0] == searchWord).Select(x => x);
foreach (var item in result)
{
Console.WriteLine("製品名" + item[0] + " 小部品" + item[2]);
} >>915
名前は出さんけどほかの言語のスレはくだらねー煽りあいしてるとこ結構ある こんなのもあるよね。
1) var data = new object[] { new { model = "製品A", parts1 = "大部品", parts2 = "小部品" } ... 以下略
2) var CLASS = new Reflection.DynamicClass( ... ); CLASS.AddProperty( "[プロパティ名]", [プロパティの型] ); var inst = CLASS.CreateInstane(); inst.[プロパティ名] = ... 以下略
1 の方はそこでしか使わない単純なデータ型にたまに使うかな。
2 は面倒くさすぎるから滅多にやらない。
ビギナーのうちにいろいろ失敗しておくと後が楽。かも。 >>917
シェルスクリプトスレ、Pythonスレ、VBAスレ。
CやC++も酷い時がある。
共通項を理解しておくと技術や人の選定に役立つ 時間がかかってしまいましたが作ることができました
楽しいですね、ありがとうございます
>>916
Linqはそのとおりです
1列目だけでなく、他の列でも引っかかるようにするため、
foreachを使ったバージョンでは全体検索
Linqを使ったバージョンではresult1とresult2を用意し、それぞれs.製品 b.部品・・・といった形で対応しました
追加でお付き合いください
[1]class製品でプログラムを作った場合、csvやexcelなどからデータを取得する際、
List<string> rows = new List<string>();
foreach (var cell in currentRow.Cells("1")) // colmunA
{
rows.Add(cell.GetString());
}
製品.Add(new 製品(rows[0], rows[1], rows[2]));
といった形で取得しました
ネットのサンプルプログラムでは数データをコードに直接打っているものは見ましたが
//{製品.製品名="zzz",製品.大部品="yyy",製品.小部品="xxx"}というような
ループを使って取得する場合、itemのようなバッファは必須でしょうか?
[2]今作ったプログラムではclass製品に特化しているため、methodなどはList<製品>で作っています
<T>とすることで<製品>や<会社>などに対応出来るジェネリックという仕組みを知りましたが
classのメンバ変数は対応表ごとに作る必要がありますか?
>>918 の2の例が答えになるかとおもい調べています
読んで頂きありがとうございます >>920
>classのメンバ変数は対応表ごとに作る必要がありますか?
必要かもしれないし必要ないかもしれない
扱う対象と用途次第
ただ初心者なら最初から汎用的な実装を実現しようとせずに
めんどくさくてもまず冗長な実装をしてから
必要に応じて汎用化することを考えたほうがいい static string[] 製品列名 = new string[] { "製品名", "大部品", "小部品" };
Dictionary<string, string> ToMap(this List<string> row, string[] columnNames) => Enumerable.Range(0, columnNames.Length)
.ToDictionary(i => columnNames[i], i => row[i])
foreach(var 製品 in rows.Select(r => r.ToMap(製品列名))) {
Console.Write(製品["製品名"]);
Console.Write(製品["大部品"]);
}
これでいいよ
ただのテーブル処理なのだから行をいちいちクラスにする必要はない
製品が特有の振る舞いを持ち始めたらクラスにすればいい >>923
辞書をExpandoObjectにすれば完璧だね
IEnumerable<List<string>> rows = MyParser.Parse(src);
var query = rows.Select(row => row.ToDynamic("ProductName", "Part1", "Part2"));
foreach(var x in query) WriteLine($"{x.ProductName}, {x.Part1}, {x.Part2}"); 行ごとに文字列出力してる時点で特有の振る舞いしてる なんか質問と回答が微妙に噛み合ってないような気もするけど
正直質問者さんが結局何が聞きたいのか何度読んでも読み取れないので何も言えんw >>918,923,925 は俺こんなテク知ってるぜ、すげーだろって言うガキでしょ
初心者スレではマジ邪魔 基本をしっかりしてからとのこと承知いたしました
辞書については当初考えたのですが、重複あり得るため棄却しました
身に余るご助言につきましてもキーワードを手がかりに勉強をしています
出発点のわたしの質問がずれていたり、仕様が不明瞭なため
みなさまには様々斟酌いただいてしまい申し訳ございませんでした
この度は大変勉強になりました
ありがとうございました >>931
初心者が使うのかよw
そもそも>>924が言うように見辛いし >>928
なんか変なのいるよね
何で初心者スレでそんなの書くんだよ
ってクソ
早くくたばれよな >>934
> 目おかしんじゃないの
お前は頭が…ww お前らそんなとこでムキになるなよ
エネルギーの無駄 >>923
List<string>を対象とした拡張メソッドをラムダ式で書いたものですか
メソッドの内容は引数の配列をkey、List<string>をvalueとするDictionaryの生成
rows.Select(r => r.ToMap(製品列名))
の部分で入れ子になったList<string>を1つずつToMapでDictionaryに変換していく
なるほどー
面白かったです ショートカットキーの中にはvisual studioのCtrl + K, Ctrl + Dのように、特定のキーと就職キーを押した後に更に押したキーで判定するものがあるけど、winformsでどう実装したらいいのかな?
検索してもよくあるControl+キー一回分のしかヒットしない…… >>941
ToolStripMenuItemsを継承してサクッとできるだろ...と思ったけど
ちょっとやってみた感じ意外とハードル高そうw
いい感じで出来たら是非シェアして欲しい >>941
「C# キー同時押し」でググれば出てくるように見えるが?
特定のキーと修飾キーの「後にさらに押したキー」じゃなく単純に同時押しならKeyDownイベントでWinAPIのGetKeyboardStateかGetKeyStateを使ってキーボードの状態を参照 ctrl k d みたいなタイプのショートカットキー使ったこと無いんでしょ
こういうタイプみるようになったの割と最近だと思うから Rx使ってシンプルに実装してるの見たことあるがどこで見たのかは忘れた
モードの状態遷移を管理しないといけないから少し面倒だよね
>>948
Visual Studio用語ではchordとかkey chord >>947
AltはあったけどCtrlってあったっけ? >>952
.NETになってからのVisual Studioにはあったような気がする >>946みたいなショートカットはemacsとかそれに影響を受けたプログラムではよく見るね。
Microsoftのアプリで使ってたかどうかは知らんが。 20年前からよくみる機能だったなら俺の知識不足だ
ここ10年くらいでいろんなアプリで見るようになったなぁという感覚だったから ToolStripMenuItemに実装するのがベストだと思うけどやっぱりこっちはハードル高いな。
どうやったらいいかさっぱり分からん。
Form自身にショートカットのリストを持たせるのは割と簡単にできた 難しいんだなこのショートカット
タイマーでどうにかなるかなあ
ありがとう 客が入れたいっつーなら仕方ないけど
こんな操作一般的じゃないし
ショートカットキーまで覚えて押してるやつアホだろって思うし
ライブラリについてない機能だとやりたくねぇなって思う >>957
初出がいつかなんぞどうでもよくて
よく見る機能だったかどうか?なんだけど本気で言ってる? >>960
お前が無知なだけ
emacsとかbriefとか知らんのだろ
馬鹿は黙ってろよ おじさんしか分からんと思うけど河合奈保子は消息不明らしいw 僕、最近英語が読めるようになりました。
英語は最近できたものですよね? emacsに入ってりゃよく見る機能に分類されるんか
せめてofficeやadobe製品に入ってるレベルだと思ってたよ 初心者向けC#スレでemacsでイキる老害
早めにくたばればいいのにw 5chは老害の巣窟ですよ
子供は他所で遊んだ方が良いですよ 昔からあるでしょ
昔はguiなんて無かったしメニューも無かったし
機能を増やすにはそうならざるを得なかった
マウス操作が当たり前の世代の人には判らんかも 話の前提がWindowsアプリなのかそれ以外も含むのか明確にしておかないと話が混乱するだけ > せめてofficeやadobe製品に入ってるレベルだと思ってたよ
って言う流れなのでGUI以前とかの昔の話をされても困る 突然後付けでOfficeとか言い始めた馬鹿
Windowsができる前からあるのに
低レベルの知識で知ったかして後付けの言い訳をするとか
最初に書いたように、
「馬鹿は黙っていればいいのに」 自分もいいオッサンだけど、「emacs知らんのか?」とか、恥ずかしくて口が裂けても言えんわ。
しまいには「JUNET知らんのか?」「パンチカード知らんのか?」とか言いそう。
こういう老害は、リアルでも「俺の若い頃は〜」とか「今の若いもんは〜」とか言ってるんだろうな。 ID変えて必死に言い訳する馬鹿
元の書き込みはこれだからな
↓
946 デフォルトの名無しさん[sage] 2020/09/21(月) 16:22:28.33 ID:fotjvOj5
ctrl k d みたいなタイプのショートカットキー使ったこと無いんでしょ
こういうタイプみるようになったの割と最近だと思うから いつからあるかないかなんて話してないっつってんのに…
よく見るの?一般的だったの?様々なアプリに搭載されてたの?
そんな広まってる機能がなんでライブラリ等々でサポートされて無くて実装例を探さなきゃならないの? 無知蒙昧で幼稚な輩は自分基準だから、
自分が始めて知った時=一般に使われ始めた時
なのだろうね。 くだらないマウント合戦やる連中はこの重複スレと一緒に沈んどけ >>978
わざとか?それともマジでボケてんのか?もとのレスは >>941 だ、ドアホ もういいでしょ。
全部>>944が悪い
建前論としてはC#の開発環境はVSだけじゃないが実態としてC#のスレで
VSのショートカットのシステムを知らない人が偉そうなこと言っちゃうのはかなり滑稽
元はそういう話だよね
起源は何かとかどれだけ一般的かとかは関係がない >>983
いや、そういうキーの組合せは最近のものだ!と知ったから始めた頭の弱い人が出てきたから変になったのでしょ >>985
>>983の言う通り「初心者用」のC#スレで昔から使われてるとかイキって虚しくね? このスレは元々ワッチョイ有り148を立てるときのミスがそのまま使われてしまった物です
続きはお好きな方へどうぞ
ワッチョイ無し
ふらっと C#,C♯,C#(初心者用) Part141
https://mevius.5ch.net/test/read.cgi/tech/1544838367/
ワッチョイ有り
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/ このスレは間違って立てられたもので立てた本人が「立て直しお願いします」って書いていて本来落とすべきスレ
C#の質問は>>989のスレでいいけどレスバトルの続きはマ板でどうぞ wpfで画面起動時Loaded?に最小化ボタンを無効化する方法を教えて下さい
起動後、特定のプロパティ変更で有効化したいです。 >>991
うろ覚えだけど、API叩かないとダメなんじゃなかったっけ? Windows標準の動作を破壊するようなことは枠なしウインドウでやるかな WPFのアプリってウィンドウの左上隅ダブルクリックで閉じない? レス数が950を超えています。1000を超えると書き込みができなくなります。