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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7bde-MYX9)
垢版 |
2017/11/07(火) 21:11:25.20ID:LeQqgpmT0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part132
http://mevius.5ch.net/test/read.cgi/tech/1507543256/

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

■コードを貼る場合は↓を使いましょう。
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: checked:vvvvv:1000:512:----: EXT was configured
2017/11/22(水) 00:54:55.44ID:d5y4PxOU0
煽るだけのバカ
728デフォルトの名無しさん (ワッチョイ 4175-wWUj)
垢版 |
2017/11/22(水) 00:55:46.04ID:Jt3bKlvZ0
そいついつもキレてんな。
729デフォルトの名無しさん (ワッチョイ 1d03-FHhe)
垢版 |
2017/11/22(水) 00:56:49.24ID:NUn4dBze0
キレッキレやな
730デフォルトの名無しさん (ワッチョイ 918f-wWUj)
垢版 |
2017/11/22(水) 00:59:12.72ID:8eOpOd0J0
>>726
エンターで動作なんだからCtrlVがどうこうとかイミフだしフォーカス外したいなら外せばそれで済む話じゃねえか
2017/11/22(水) 01:38:12.73ID:QmSU3CcY0
>>730
テキストボックスでkillfocus以外での処理は鬼門
そういう暗示にかかっているのです
でもctrl+Aは気軽に入れるけどね
732デフォルトの名無しさん (ワッチョイ 6ee8-LGLT)
垢版 |
2017/11/22(水) 22:27:47.55ID:2ViDa+Rm0
データバインド教えて

this.dataGridView_List.DataSource = list;
これをロード時に書けば
listにAddしてけばDataGridに行追加されてく?
2017/11/22(水) 23:26:53.46ID:OlRubHVI0
listがINotifyCollectionChangeを実装したオブザーバブルなリストならね。
ただのリストじゃ反映されないと思う
734デフォルトの名無しさん (ワッチョイ 6ee8-LGLT)
垢版 |
2017/11/22(水) 23:30:35.23ID:2ViDa+Rm0
>>733
これWPFだけ?
735デフォルトの名無しさん (ワッチョイ 4175-wWUj)
垢版 |
2017/11/22(水) 23:39:53.01ID:Jt3bKlvZ0
>>734
Formアプリでもあるんじゃない?
http://www.digi-con.co.jp/tech/node/66
2017/11/23(木) 00:45:13.68ID:axjWBGmc0
素朴な疑問なんですけど
ListコレクションからLINQでデータ検索したい時とか、データがソートされてる方がパフォーマンスが良いとかあるんでしょうか
2017/11/23(木) 00:48:24.00ID:3UvXGadQ0
>>736
ソートされてるならBinarySearchを使えば速い
LINQ使ったら線形検索になるのでソートは意味ない
2017/11/23(木) 09:20:42.83ID:axjWBGmc0
>>737
BinarySearchが使えるのは知りませんでした
ありがとうございます
2017/11/23(木) 10:19:01.69ID:ocuKvabTr
件数少ない時は線形の方が速いよ
740デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 16:29:13.27ID:1glLBmTM0
1 のとき 0.7
3 のとき 0.9
8 のとき 0.6
9 のとき 0.5

こういうデータがある時、右の要素が最大である左の要素の番号を返すプログラムを作りたいのですが
簡単な方法はないでしょうか?
2017/11/23(木) 16:36:15.34ID:6Js7jM8k0
List〈class〉でやってみるといいのでは?
class Data

public int id{get;set;}
public double result{get;set;}

みたいに作って、ListをループさせてData.resultを確認して一番大きい数字のid(クラス)を返すみたいな
ICollectionに一番大きい数字のindex返す関数とかあった気がするからもっと楽に作れるかもしれないけど
2017/11/23(木) 16:41:24.65ID:E5KFBI6l0
楽さなら右要素でソートして末尾の左要素返せば
普通に探索しても大した手間の差ではない気もするが
2017/11/23(木) 16:44:45.88ID:DqyU4UwDM
>>740
DBに突っ込んでから
select key from data
where value = (select max(value) from data)
でいいよ
744デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/23(木) 16:58:00.67ID:pEApwQyq6
@“1 のとき 0.7
3 のとき 0.9
8 のとき 0.6
9 のとき 0.5”
.Split(‘\n’)
.Select(line => line
.Split(“のとき”)
.Select(piece => piece.Trim())
)
.OrderBy(pair => pair[1])
.Last()[0];
745デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/23(木) 17:01:37.44ID:pEApwQyq6
変換忘れた(;ω;)
2017/11/23(木) 17:03:20.80ID:6Js7jM8k0
>>744
この仕様はまったく考えてなかった
仕様聞くのって大変だな・・・
2017/11/23(木) 17:17:36.99ID:cW6v2Sii0
>>740
https://ideone.com/W1bKs5
2017/11/23(木) 17:24:58.41ID:cW6v2Sii0
よく考えたらC#だった、寝惚けてるわ
2017/11/23(木) 17:44:11.84ID:cW6v2Sii0
どっちで書いても同じようなもんだった
https://ideone.com/fD2j3A
750デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 18:22:14.69ID:1glLBmTM0
みなさん有難う御座います。
Dictionaryを使ってみようと思うのですが

Dictionary<string,double> dict = new Dictionary<string,double>();
dict.Add("1",0.7);
dict.Add("3",0.9);
dict.Add("8",0.6);
dict.Add("9",0.5);

このあとvalueが最大値の時のキーの値を求める方法がわかりません
dict.OrderBy(pair.Value).Last.Keyじゃダメなんでしょうか?
751デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/23(木) 18:24:15.88ID:pEApwQyq6
>>750
いいよ
752デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 18:34:21.92ID:1glLBmTM0
>>751
現在のコンテキストに 'pair' という名前は存在しません。
というエラーが出て出来ないです…
2017/11/23(木) 18:37:13.32ID:Go3NcBxu0
pair宣言してないからだろうに、
dict.OrderBy(pair => pair.key).Last.Keyじゃないかな。
754デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/23(木) 18:37:55.69ID:pEApwQyq6
https://ideone.com/XlOtVQ
2017/11/23(木) 18:38:17.36ID:Go3NcBxu0
もちろん
pair => pair.Value
だったな。
2017/11/23(木) 18:39:03.67ID:4OkBFxYdM
>>752
どこか適当なところで勉強してから来なさい
757デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 18:54:09.98ID:1glLBmTM0
>>753
>>754
>>755
ありがとうございます!出来ました
ただ同じキーがあると動かなくなるので別の方法を考えなければいけない様です…
2017/11/23(木) 18:59:24.88ID:kBi82nCb0
>>757
同じキーが存在するのにDictionary使うのが間違い
他の人が例として使っているDataクラスで事足りると思うんだが
2017/11/23(木) 18:59:33.92ID:yDdQ43O00
そりゃキーが重複したらエラーになるよ
辞書ってそういうもんでしょ

あと重複があるんなら>>749のを使えば?
2017/11/23(木) 19:07:10.50ID:eO5S+uX/0
「valueが最大値の時のキーの値」だけが必要なんじゃなかろうか?
761デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 19:14:33.13ID:1glLBmTM0
>>749
で教えて頂いたのでやってみます!
762デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 19:16:31.56ID:1glLBmTM0
配列の大きさが不明なのでaddが使える方法でやりたかったもので…
763デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/23(木) 19:18:05.05ID:pEApwQyq6
var list = List<Data>()
これを使えばいい
Addもできる
2017/11/23(木) 20:12:06.29ID:eO5S+uX/0
>>762
単に最大時のkey, valueだけが欲しいのならListもaddも不要だけどね。。
2017/11/23(木) 20:41:13.63ID:FrNu/68p0
Name : aaa
Info : vvv
Message : sss
テキストファイルに↑のような空白文字で:を揃えた情報を、File.ReadLinesで取り出し、
.ToArray()で配列にしたあとTextBoxのLinesに設定したところ、コロンの位置がずれてしまいます。
foreachでTextプロパティに追加していく方法でもずれるのですが、Consoleだと綺麗に出力されます。
なにか対策等ありますか?
2017/11/23(木) 20:43:45.19ID:kBi82nCb0
>>765
コンソールと同じように、テキストボックスのフォントをMSゴシックみたいな等幅フォントにする
2017/11/23(木) 21:07:02.11ID:FrNu/68p0
>>766
MSゴシックで試したところ解決しました。
ありがとうございました。
等幅フォントの使い道がこんなところにあったとは、でした。
768デフォルトの名無しさん (ワッチョイ 0775-uycp)
垢版 |
2017/11/23(木) 21:25:10.61ID:vcWp0UMr0
>>764
思わせぶりなことだけ言うだけ。
769デフォルトの名無しさん (ワッチョイ 0775-uycp)
垢版 |
2017/11/23(木) 21:29:38.22ID:vcWp0UMr0
>>765
タブ文字じゃだめなん?
770デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 21:48:04.04ID:1glLBmTM0
>>749とList使った方法で出来ました!
有難う御座いました。
ソート時の=>の書き方が色々あっていまいち理解出来てないですが…
2017/11/23(木) 21:59:19.61ID:6Js7jM8k0
ラムダ式とLinqは後々覚えていけばいいんじゃないの
とりあえずこういう書き方もできるって事で
2017/11/23(木) 22:15:45.74ID:tJBaWbvoa
ラムダ式はデリゲートと同時に覚えようよw
たいして覚えることないんだし、今時C#プログラマの最小要件でしょ
2017/11/23(木) 22:21:30.93ID:Bg3Rqdl/0
HttpClient client=new HttpClient();
FormUrlEncodedContent contents = new FormUrlEncodedContent(new
Dictionary<string, string>{
{"あああ","1"},
{"あああ","2"},
{"いいい","0"},
});
respnse = await client.PostAsync(url, contents);

このままだと同じキーを含んでいるのでエラーが出ます。
サイトの仕様上、このままデータを送らないといけないのですが、どう変更すれば
きるようになりますか?
2017/11/23(木) 22:24:57.40ID:eO5S+uX/0
>>770
1 のとき 0.7
3 のとき 0.9
4 のとき 0.9
5 のとき 0.9

こんなデータのとき、3,4,5のどれでもええの?
2017/11/23(木) 22:31:44.60ID:yDdQ43O00
>>773
KeyValuePairの配列でやってみたら?試してないから動くかわからんけども
2017/11/23(木) 22:53:52.49ID:FrNu/68p0
>>769
ありがとうございます。タブ文字でもできることを確認しましたが、
今回はString.Format("{0, 4} : {1}", num,message)のような文字列も綺麗に出力したいので
等幅フォントを使用したいと思います。
777デフォルトの名無しさん (ワッチョイ 0775-uycp)
垢版 |
2017/11/23(木) 23:31:46.08ID:vcWp0UMr0
>>773
new List<KeyValuePair<string, string>>{
{"あああ","1"},
{"あああ","2"},
{"いいい","0"},
}
778デフォルトの名無しさん (ワッチョイ 27f7-JCOS)
垢版 |
2017/11/23(木) 23:37:02.83ID:1glLBmTM0
>>774
左のデータは重複することはあっても右のデータは0.93234…みたいな感じで重複しない感じです!
2017/11/23(木) 23:56:53.12ID:6gvgNZ3b0
乱数をキーにして衝突して死んだやつを俺は知ってる
2017/11/24(金) 10:33:29.48ID:mPUfH2u/0
>>774のようなコーナーケースの指摘に対して、「そんなケースは稀だから考えなくてよい」とするか
「どっちでもいいならどっちかに決めよう」とするか、開発センスが現れるな。
2017/11/24(金) 11:35:20.40ID:GsVE4oKd0
今回は稀でもないけどね
2017/11/24(金) 11:52:48.02ID:EfmvZejc0
最大値の行を取り出すだけにコレクションは不要だけどね
783デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 11:58:30.46ID:PklTWoNU6
>>782
だから口だけカマチョはやめろ
2017/11/24(金) 12:01:51.76ID:EfmvZejc0
>>783
配列の最大値を所得するロジックを知らんと?
配列ソートの前に習うだろ。
785デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 12:02:53.10ID:PklTWoNU6
動的リストだからAddとか必要って言ってんだろ
2017/11/24(金) 12:09:15.88ID:mqWCdSHW0
>>782
配列リストの最大値出せるけど今回はindexがバラバラになってるじゃん
2017/11/24(金) 12:14:42.91ID:EfmvZejc0
>>785
動的リストとは?
788デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 12:15:06.09ID:J2WegmLO6
>>787
Add使いたい言っとるだろ
2017/11/24(金) 12:22:59.05ID:mqWCdSHW0
一応配列もコピーとサイズ増やして擬似的に追加は出来る
昔の俺が調べて書いてたけどコレクション使えと怒られた
2017/11/24(金) 12:26:56.52ID:EfmvZejc0
>>788
それはお前らが誘導したからw
元データの構造がが何なのかワカランとどれが最適かはわからんな
791デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 12:29:02.86ID:J2WegmLO6
>>790
>>762
2017/11/24(金) 12:42:17.78ID:EfmvZejc0
>>791
c#の中からいきなり>>740のデータが湧いて出てくるはずもなく、
そのような仕様があるとしたら「宿題」だなw
793デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 12:44:49.36ID:J2WegmLO6
コレクションは要らない!(キリッ
2017/11/24(金) 12:47:41.40ID:EaZH7dVF0
>>792
いい加減黙ったら。
必要だからListにしてるだけで、>>782とか何の足しにもならんぞ。
795デフォルトの名無しさん (ワッチョイ 8730-forR)
垢版 |
2017/11/24(金) 12:53:50.07ID:qz26KndN0
>>760
>>764
>>782
2017/11/24(金) 12:55:58.12ID:EfmvZejc0
>>794
オレは最大値を取り出すだけならリスト構造は不要と言っているだけだ。
間違ってるか?
2017/11/24(金) 13:07:04.20ID:EaZH7dVF0
>>796
元データを用意する実装の都合でそうしてるだけなのに、そんな分かり切ったことを言う必要ないだろ。
勘違いしてるそぶりもなかったしな。
2017/11/24(金) 13:12:51.07ID:EfmvZejc0
>>797
何を言いたいのかさっぱりわからんわ。
2017/11/24(金) 13:14:37.94ID:EaZH7dVF0
>>798
最大値を取り出すためにリスト構造にしているわけではない。
これなら分かる?
2017/11/24(金) 13:18:59.06ID:mqWCdSHW0
あの説明でこの配列仕様考えてたってこと?
double?[] data = new double[]

null,
0.7,
null,
0.9,
null,
null,
null,
null,
0.6,
0.5
};
2017/11/24(金) 13:20:05.03ID:mqWCdSHW0
>>800
あぁ多次元やジャグ配列があるか
これ忘れて
2017/11/24(金) 13:23:12.73ID:EfmvZejc0
>>799
最大値を取り出した後の事に触れて無いのも事実。
最大値だけが必要なのか、取り出した最大値を使ってリストに何かをしたいのかわからない。
本人は最大値の取得だけで満足して消えてしまったし。
2017/11/24(金) 13:37:21.47ID:cWMe5SKyM
本当に最大値だけでいいのかも知んないしね
2017/11/24(金) 13:42:02.13ID:mqWCdSHW0
右が最大値の時の左の要素の番号が欲しいって書いてあるぞ
インデックスも飛び飛びで左の要素が重複するときもあるって後から出してる
確かに多次元やジャグ配列ならその仕様はありそうだけどその差は技術力の無い俺には大きな差がわからん
805デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 14:07:29.79ID:ZR8Pz10g6
コレクションなんか必要ない(キリッ
2017/11/24(金) 14:40:56.86ID:asGQ9mvw0
今日のウンコの最大サイズとか何回目に出たウンコとかどうでもいいだろ
2017/11/24(金) 17:05:26.06ID:BCw6/Ft50
>>806
でも色は大事だぞ
どす黒いのはヤバイ
2017/11/24(金) 17:12:26.57ID:asGQ9mvw0
>>807
それ、最大サイズとかじゃなくて
少量でもアウトだから
2017/11/24(金) 20:00:59.51ID:7dGX3zxS0
非同期処理のasync/awaitって

処理A
var ret = await Task();
処理B

みたいなときはTaskの中の処理が終わるまでは処理Bには進まないという理解であってる?

あとTaskの中がプロパティに値を代入するだけみたいなawaitを使うタイミングがない場合は

await Task.Run(()=>{ Taskの中でやりたい処理 });

って書くしかない?
2017/11/24(金) 20:36:08.05ID:GsVE4oKd0
馬鹿か
8回もよく粘ったもんだな
2017/11/24(金) 21:02:49.89ID:3H9uQYBg0
>>809
1.そのasyncメソッドの中だけを考えればそれで合ってる
2.ちょっと何言ってるか分からない awaitを使うタイミングがないって何?
2017/11/24(金) 21:16:49.61ID:h5bnr1q30
まだひよっこでよくわかって無いんだが
過去の他人が書いたコードで

if (条件){
処理 A
}
else if (条件){
処理 B
}
else{
// 何もしない
}

みたいなコードを見ることがあるんだが
このelseの何もしないってのは必要なのか?
2017/11/24(金) 21:23:55.00ID:7dGX3zxS0
>>811
大雑把に書くと下みたいなクラスのプロパティ書き換えるだけのメソッド
awaitする要素見えないけどawait演算子書かないとvisual studioが警告出すからどうやってawaitすればいいのかと

private async Task<bool> Task()
{
a=b;
c=d;
return true;
}
2017/11/24(金) 21:24:04.90ID:573d9hpx0
>>812
本人に聞けよw
というごく当たり前の話を省くと
・説明的なコードとしてわざわざつけくわえてある
・追加の可能性があるのでわかりやすいようにわざわざ残してある
このあたりじゃだめか?
C#として必要か?って話なら自分で消してみてビルドしろよって返す
2017/11/24(金) 21:25:24.75ID:mqWCdSHW0
後々追加するかもで書いたり何もしないってのをはっきり伝えたいとかで書いてるんじゃないかな
コンストラクタで
class Sample

public Sample()

//何もしない


に近いものを感じる
2017/11/24(金) 21:41:06.27ID:h5bnr1q30
>>814>>815
本人はもう辞めてたの
あぁ説明的な感じなのかな
別にこんなふうに書くのがC#のお約束とかじゃないよね
2017/11/24(金) 21:43:14.83ID:573d9hpx0
>>816
IDEやコンパイラが怒らない限りC#の約束事とか知らんしどうでもいい
そしてそのくらいの最適化はコンパイラに期待できる
2017/11/24(金) 21:43:58.48ID:zpTIVf120
使い道としてはなんだろね
何もしないにブレークポイントを設定するとAもBも処理しない条件のとき止まるかな
だったらlogger.infoしといてもいいのに
2017/11/24(金) 21:45:42.73ID:QGkXc5ztM
>>812
SIerのコーディング規約としてCOBOLの次代からある書き方だよ。
機械的にelseを入れるんじゃなくてelseの処理で何かもれて無いか考えてから空elseを入れましょうって事が形骸化して残ってる。
ほぼなんの意味もないコードです。
2017/11/24(金) 21:56:58.69ID:h5bnr1q30
>>817>>819
その人独自の癖みたいなもんだったってことか
消しても問題なく動くんでまぁ大丈夫っぽいし
2017/11/24(金) 22:17:05.19ID:hbIcAcZv0
>>809ってretが処理Bの中で使われなきゃ、待たずに処理B行っちゃうんじゃないの?
822デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 22:19:14.41ID:7i1mZEYS6
そのコードがasync修飾子を付けたメソッドの中に書かれてるとしたらそれはないだろ
2017/11/24(金) 22:31:11.65ID:h5bnr1q30
非同期処理内のコードでは無かった
これってasync修飾子内のコードだとなんかのエラー回避とかになるの?
824デフォルトの名無しさん (ガックシ 068f-forR)
垢版 |
2017/11/24(金) 22:31:59.96ID:7i1mZEYS6
おまえに言ってねえよカス
825デフォルトの名無しさん (ササクッテロル Spfb-GVqX)
垢版 |
2017/11/24(金) 22:37:51.54ID:tzXAZjO3p
>>824
レス指定すら出来ないとか低脳かよ
826デフォルトの名無しさん (ワッチョイ 8716-forR)
垢版 |
2017/11/24(金) 22:39:38.31ID:S6xecz6o0
バカか?
2017/11/24(金) 22:41:49.16ID:7dGX3zxS0
下のSetメソッドだと処理Bでretを使ってなくても大丈夫?
private async Task Set()
{
処理A
var ret = await Task();
処理B
}

private async Task<bool> Task()
{
a=b;
c=d;
return true;
}

上のコードでTaskの中身にawait使いたかったら下みたいに書くしかない?
他の方法ある?

private async Task<bool> Task()
{
Task task = Task.Run(()=>{
a=b;
c=d;
}
await task;
return true;
}
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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