トップページ⇒tech
1002コメント219KB

ふらっと C#,C♯,C#(初心者用) Part123 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/07/31(日) 12:02:50.03ID:845Zva4M
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part122
http://echo.2ch.net/test/read.cgi/tech/1468078489/

■関連スレ
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
01751742016/08/06(土) 11:43:35.91ID:dqPdKOk8
訂正
この場合はJoinじゃなくてStringのコンストラクタだな
0176デフォルトの名無しさん2016/08/06(土) 11:53:33.90ID:4WcaCha9
糞遅いコードばかり貼りやがって。
0177デフォルトの名無しさん2016/08/06(土) 11:58:21.50ID:GxNcCQSR
>>176
Linqは遅い→百万回のループで数十msの差でした
はもう飽きた
0178デフォルトの名無しさん2016/08/06(土) 12:13:45.80ID:dbq4lnef
>>174
https://ideone.com/Ib42NI
手元の結果は
TestMethod1→181ミリ秒
TestMethod2→104ミリ秒
TestMethod3→258ミリ秒
であった
たまたま気まぐれで書いた俺WIN!!何に勝利したのか分からんけど
ぶっちゃけどれでもいいんじゃないか
0179デフォルトの名無しさん2016/08/06(土) 12:18:42.25ID:JXt5PACI
10万回の試行でその程度の差なら殆ど誤差みたいなものだな
0180デフォルトの名無しさん2016/08/06(土) 12:21:41.85ID:dqPdKOk8
>>178
もっと長い文字列でやってみ
よくあるLINQ遅いみたいな話じゃなくて、悪名高いループで文字列+=と同じ問題
0181デフォルトの名無しさん2016/08/06(土) 12:23:06.08ID:0Ti/jpH+
>>178
正規表現のやつだけ、他と文字列違ってない?
0182デフォルトの名無しさん2016/08/06(土) 12:37:13.85ID:4WcaCha9
致命的。wpfが糞遅い理由が分かってねーな。
0183デフォルトの名無しさん2016/08/06(土) 12:44:42.46ID:JXt5PACI
見当違いなことつぶやき、代案出さずに文句だけは立派な人が来た
0184デフォルトの名無しさん2016/08/06(土) 12:53:33.75ID:dhAdgMp9
IndexOfAnyでも使って泥臭く書くのが結局一番早そう
0185デフォルトの名無しさん2016/08/06(土) 12:54:17.70ID:4WcaCha9
wpfのソース見てないんだね。おまえらみたいなコードばっかだよ。
0186デフォルトの名無しさん2016/08/06(土) 14:11:44.98ID:/GaBlc8t
優秀ってことか
0187デフォルトの名無しさん2016/08/06(土) 14:17:42.26ID:yXATHeUJ
ttps://ideone.com/aZQl3d

00:00:00.0474900(10〜256文字長の半角文字列をランダムに100000行作る)

それの処理結果

00:00:04.4394780(166氏)
00:00:01.7575421(170氏)
00:00:03.2682252(俺)

正規表現は覚えればシンプルで楽だけど、
そもそも正規表現が重いのは当然で、既知の事実。
機能ムダに多いし。

一応正規表現にはコンパイル済み結果を用いることを強要できる。

>>178
>ぶっちゃけどれでもいいんじゃないか

同意。
面白い情報ありがとう>166&170
0188デフォルトの名無しさん2016/08/06(土) 14:31:33.02ID:gSAtyijb
馬鹿な悩み抱えてる暇があったら
お前の生活を10分でも効率化する方法でも考えてろクソカスども
0189デフォルトの名無しさん2016/08/06(土) 15:01:25.95ID:5meXUbqk
>>166
>>170
ありがとうございます!
0190デフォルトの名無しさん2016/08/06(土) 15:07:06.35ID:WZNCfna7
DataTableのSelectメソッドについて質問です
このサイト http://okwakatta.net/code/dst13.html で条件に当てはまったデータを絞り込んでとってくるコードの勉強をしてます
そのサイトのテストコードは難なくできたのですが
そのコードを元に条件をパンではなく2016年8月を条件に変更してメッセージボックスに表示したいのですがうまく動作しませんでした
どこが間違っているのでしょうか
ちなみにそのサイトのColumn1のidの部分を日付に変更してます


dataRows =dataset.Tables["Table1"].Select("日付 = #2016/08#");

for (int i = 0; i<dataRows.Length; i++)
{
MessageBox.Show(Convert.ToString(dataRows[i][0]));
}
0191デフォルトの名無しさん2016/08/06(土) 15:27:48.83ID:JXt5PACI
日付 <= #開始日# AND #終了日# <= 日付

でもダメ?
0192デフォルトの名無しさん2016/08/06(土) 15:28:36.09ID:yXATHeUJ
dataRows =dataset.Tables["Table1"].Select("日付 =< #2016/08/01# and 日付 < #2016/09/01#");
じゃないか。違ったらすまん。
0193デフォルトの名無しさん2016/08/06(土) 15:30:19.63ID:yXATHeUJ
=< ×
↓
<=

だな。。。
0194デフォルトの名無しさん2016/08/06(土) 15:41:53.94ID:JXt5PACI
逆だったわ済まん
#開始日# <= 日付 AND 日付 <= #終了日#
0195デフォルトの名無しさん2016/08/06(土) 15:42:39.24ID:7SYpUscy
>>191-193
そのコード書いてみましたが
フィルター式 日付 =< #2016/08/01# and 日付 < #2016/09/01#はBoolean型に対して評価しません
になってエラー吐きました
0196デフォルトの名無しさん2016/08/06(土) 15:48:37.78ID:7SYpUscy
>>194のコードでできました
サイトを見たらフィルターの式は (列名  条件)の書き方じゃないとダメだと思ってましたが
if文とかみたいな条件の書き方でもできるんですね!
回答してくださった方ありがとうございました
01971902016/08/06(土) 17:29:04.80ID:cGwfqBzu
何度もすみません
今度は先程と同じサイト http://okwakatta.net/code/dst13.html と同じ条件かつその金額の合計をメッセージボックスに表示させようとしてるのですが
加算代入ができなくて困ってます

自分の解釈ではfor文のiで何行目なのか取得し[2]で何列目か取得してると思ったので
int a += (int)dataRows[i][2];と書けばfor文が終わるまでパンと付く商品名のpriceを加算できると思ったのですができません
条件を検索しつつ数値を加算させる方法はどう書けばよいでしょうか


dataRows =dataset.Tables["Table1"].Select("商品名 LIKE '%パン'");

for (int i = 0; i<dataRows.Length; i++)
{
int a += (int)dataRows[i][2]; ←ココ
MessageBox.Show(Convert.ToString(a));
}
0198デフォルトの名無しさん2016/08/06(土) 17:35:38.53ID:RrWaYmp5
>>197
int a += Convert.Toint32(dataRows[i][2]);
または
int a += Convert.Toint32(dataRows[i][2].ToString());
ではだめかな
0199デフォルトの名無しさん2016/08/06(土) 17:44:45.45ID:GxNcCQSR
>>197
Compute とSum使えばいいんじゃない?
https://msdn.microsoft.com/ja-jp/library/system.data.datatable.compute(v=vs.110).aspx
0200デフォルトの名無しさん2016/08/06(土) 18:31:09.89ID:4WcaCha9
>>187
00:00:00.0201643
00:00:00.6455476
00:00:00.9637530
00:00:00.6177757 おまえ
00:00:00.0286978 おれ

やっぱりおまえらのコードは糞おせーわ。というかおまえのPCなんでそんなに遅いんだ。
02011902016/08/06(土) 18:45:36.02ID:cGwfqBzu
>>198
どちらもint a += (int)dataRows[i][2];と同じエラーが出ますね
ちなみに ;が必要です '+='は無効ですと書いてます

>>199
MessageBox.Show(Convert.ToString(dataTable1.Compute("Sum(Price)",null)));
と書くとPrice列のすべてを合計するので
MessageBox.Show(Convert.ToString(dataTable1.Compute("Sum(dataRows[i][2])",null)));
と書きましたが
集約引数の構文エラー 可能なChild修飾子を含むtン一列の引数を指定してください とエラーが出ました
0202デフォルトの名無しさん2016/08/06(土) 18:46:10.31ID:xS5ikndo
愉快なお方w
0203デフォルトの名無しさん2016/08/06(土) 18:47:38.07ID:yXATHeUJ
>>200
ソースは載せろよ。
俺のPCは時代遅れ(FMVざまぁ)だからだろう。
そして、逆転現象起きてて不思議がってる。
0204デフォルトの名無しさん2016/08/06(土) 18:49:50.34ID:CVktsp8z
>>201
とりあえずforの外側でaを定義したら
int a+=はダメだろ
0205デフォルトの名無しさん2016/08/06(土) 18:56:06.11ID:dbq4lnef
>>199
dataset.Tables["Table1"].Compute("Sum(価格)", "商品名 LIKE '%パン'");
を実行可能にするにはstring[] valueをint[] valueに書き直し
dt.Columns.Add("価格", typeof(int));
と変える必要がある
なお>>197で累計されないのはint aのスコープがfor内だからじゃね
02061902016/08/06(土) 19:02:08.33ID:cGwfqBzu
>>204
int a += ・・・の部分で初期化してますからfor文の外側では定義してませんよ?
ちなみにfor文の中で
int a;
int a+= ・・・と書いても同じでした
0207デフォルトの名無しさん2016/08/06(土) 19:05:50.55ID:CVktsp8z
>>206
何で中で書くんだw
>>205の一番下も読めよ
int a=0;
for
{
 a+=
}
じゃないと結果が出ないぞ
02081902016/08/06(土) 19:32:26.69ID:cGwfqBzu
>>205
Selcet文の条件式をそのままComputeでも使えるのですね!
string[] valueをint[] valueの部分はdatasetの価格をint32に指定してあるので特に必要なかったみたいです

>>207
forの外に書いたらできましたw




条件文の練習をもっとやらないと無駄が多いコードになるのがわかったのでもっと勉強したいと思います
回答してくれた方々ありがとうございました
0209デフォルトの名無しさん2016/08/06(土) 21:22:54.34ID:1o0VXbRv
LinQのdistinctで被り以外をデータベースや配列から抜き出したいんだけど
一行のみかひとつの情報しか抜け出せない
助けて

db
id 名前 チーム
1 A 111
2 B 222
3 C 333
4 D 111
5 E 222
6 F 111

ここから
1 A 111
4 D 111
6 F 111
を抜き出したいんだけど
1A 111
または
1
4
6
みたいな列情報しか抜け出せない
0210デフォルトの名無しさん2016/08/06(土) 21:36:27.09ID:AtyBvCCV
どういうlinq書いたんだよう
select(チーム名==111)
するだけだろう
0211デフォルトの名無しさん2016/08/06(土) 21:37:06.10ID:AtyBvCCV
あ、この場合はwhereか。
0212デフォルトの名無しさん2016/08/06(土) 21:42:15.42ID:kgdaGH1I
>>211
それで抜き出されるのどこに格納したらええのかさっぱりできんくて
(From d in db
where d.チーム == チーム条件
select d ). ToList()
こんなんかいてる
0213デフォルトの名無しさん2016/08/06(土) 21:52:09.53ID:JXt5PACI
>>212
それで望み通りのデータが抽出されるぞ
抽出後の扱い方が間違ってるとかそんなオチじゃね?
0214デフォルトの名無しさん2016/08/06(土) 22:08:59.93ID:kgdaGH1I
>>213
やっぱり抜き出せるよね
入れ方や扱い方が間違っているのか

これを入れる先は
A {
int id
string Name
string team
}
List<A> = 上記のLinQ

A {
List<int> id
List<string> Name
List<string> team
}
A = 上記のLinQ

どっちのが正しいのだろうか
0215デフォルトの名無しさん2016/08/06(土) 22:23:09.62ID:JXt5PACI
上が正しい
下はコンパイルエラー

試しにコード書いてみたから自分のと比較してみ
https://ideone.com/AOHpJe
0216デフォルトの名無しさん2016/08/06(土) 23:27:28.42ID:kgdaGH1I
>>215
サンクス
今の問題はデータが入っていなかったからだった…

データアクセス層だけ作ってあるんだが
データアクセス層では値がちゃんと存在しリターンするとなくなってしまう
こんな状況どうすりゃええんや……
外部キーを受けてる場合値はリターン保存されないのか?
0217デフォルトの名無しさん2016/08/07(日) 00:10:47.77ID:PJLuGKby
同じプログラムを実行してるのに結果が変わるって何なんだろうか
乱数とかは一切ないのに…
0218デフォルトの名無しさん2016/08/07(日) 00:23:00.55ID:+12gYMyx
スコープが外れていて値が反映されない
変数名が被っていて該当する方に代入されていない
スレッドが非同期で期待したタイミングで値が入っていない
想定外のイベントが割り込んでいる

他に考えられる原因はあるかな
>>216>>217
コード全部晒さないと他人にはわからないよ
0219デフォルトの名無しさん2016/08/07(日) 00:33:10.44ID:uHQnEepi
>>218
確かにそうだね
>>217です

A {
int id {get;set;}
string name {get;set;}
}

List<A> abc () {
List<A> ListA= new List<A>();
何かの処理
return ListA; ←※1
}

main() {
List<A> ListA= new List<A>();
ListA = abc; ←※2
}

こんな感じの処理してるんだがmainに値がうまく入らない
謎なんだが※1でブレイクポイントを置いて配列の中身を確認すると、確認をしたところだけ※2で値がちゃんと入る
※1では全ての配列に値が入っていて、配列番号1 3 7 8を確認した場合、※2で値が入るのは配列番号1 3 7 8番
確認しなかったら全てnullになる
0220デフォルトの名無しさん2016/08/07(日) 01:20:21.77ID:Gd+38Xi7
あ
0221デフォルトの名無しさん2016/08/07(日) 01:21:43.39ID:Gd+38Xi7
い
0222デフォルトの名無しさん2016/08/07(日) 01:22:00.83ID:Gd+38Xi7
う
0223デフォルトの名無しさん2016/08/07(日) 01:22:37.35ID:Gd+38Xi7
え
0224デフォルトの名無しさん2016/08/07(日) 01:22:57.19ID:Gd+38Xi7
お
0225デフォルトの名無しさん2016/08/07(日) 01:23:13.55ID:Gd+38Xi7
か
0226デフォルトの名無しさん2016/08/07(日) 01:23:30.05ID:Gd+38Xi7
き
0227デフォルトの名無しさん2016/08/07(日) 01:23:46.22ID:Gd+38Xi7
く
0228デフォルトの名無しさん2016/08/07(日) 01:24:04.23ID:Gd+38Xi7
け
0229デフォルトの名無しさん2016/08/07(日) 01:24:22.77ID:Gd+38Xi7
こ
0230デフォルトの名無しさん2016/08/07(日) 01:24:39.35ID:Gd+38Xi7
さ
0231デフォルトの名無しさん2016/08/07(日) 01:24:55.96ID:Gd+38Xi7
し
0232デフォルトの名無しさん2016/08/07(日) 01:26:02.21ID:Gd+38Xi7
す
0233デフォルトの名無しさん2016/08/07(日) 01:26:29.27ID:Gd+38Xi7
せ
0234デフォルトの名無しさん2016/08/07(日) 01:26:45.02ID:Gd+38Xi7
そ
0235デフォルトの名無しさん2016/08/07(日) 01:27:16.68ID:Gd+38Xi7
た
0236デフォルトの名無しさん2016/08/07(日) 01:27:34.81ID:Gd+38Xi7
ち
0237デフォルトの名無しさん2016/08/07(日) 01:27:51.80ID:Gd+38Xi7
つ
0238デフォルトの名無しさん2016/08/07(日) 01:28:09.32ID:Gd+38Xi7
て
0239デフォルトの名無しさん2016/08/07(日) 01:28:24.61ID:Gd+38Xi7
と
0240デフォルトの名無しさん2016/08/07(日) 01:28:40.83ID:Gd+38Xi7
な
0241デフォルトの名無しさん2016/08/07(日) 01:28:59.32ID:Gd+38Xi7
に
0242デフォルトの名無しさん2016/08/07(日) 01:29:19.88ID:Gd+38Xi7
ぬ
0243デフォルトの名無しさん2016/08/07(日) 01:29:36.39ID:Gd+38Xi7
ね
0244デフォルトの名無しさん2016/08/07(日) 01:29:52.59ID:Gd+38Xi7
の
0245デフォルトの名無しさん2016/08/07(日) 01:30:09.68ID:Gd+38Xi7
は
0246デフォルトの名無しさん2016/08/07(日) 01:30:26.82ID:Gd+38Xi7
ひ
0247デフォルトの名無しさん2016/08/07(日) 01:30:51.74ID:Gd+38Xi7
ふ
0248デフォルトの名無しさん2016/08/07(日) 01:31:35.29ID:Gd+38Xi7
へ
0249デフォルトの名無しさん2016/08/07(日) 01:31:55.07ID:Gd+38Xi7
ほ
0250デフォルトの名無しさん2016/08/07(日) 01:32:11.17ID:Gd+38Xi7
ま
0251デフォルトの名無しさん2016/08/07(日) 01:32:33.69ID:Gd+38Xi7
み、
0252デフォルトの名無しさん2016/08/07(日) 01:32:53.76ID:Gd+38Xi7
む
0253デフォルトの名無しさん2016/08/07(日) 01:33:15.74ID:Gd+38Xi7
め
0254デフォルトの名無しさん2016/08/07(日) 01:35:14.14ID:Gd+38Xi7
も
0255デフォルトの名無しさん2016/08/07(日) 01:35:33.61ID:Gd+38Xi7
や
0256デフォルトの名無しさん2016/08/07(日) 01:35:49.31ID:Gd+38Xi7
ゆ
0257デフォルトの名無しさん2016/08/07(日) 01:36:12.20ID:Gd+38Xi7
よ
0258デフォルトの名無しさん2016/08/07(日) 01:36:27.84ID:Gd+38Xi7
ら
0259デフォルトの名無しさん2016/08/07(日) 01:36:43.80ID:Gd+38Xi7
り
0260デフォルトの名無しさん2016/08/07(日) 01:36:59.41ID:Gd+38Xi7
る
0261デフォルトの名無しさん2016/08/07(日) 01:37:19.44ID:Gd+38Xi7
れ
0262デフォルトの名無しさん2016/08/07(日) 01:37:39.09ID:Gd+38Xi7
ろ
0263デフォルトの名無しさん2016/08/07(日) 01:37:55.20ID:Gd+38Xi7
わ
0264デフォルトの名無しさん2016/08/07(日) 01:38:12.91ID:Gd+38Xi7
を
0265デフォルトの名無しさん2016/08/07(日) 01:38:36.36ID:Gd+38Xi7
ん
0266デフォルトの名無しさん2016/08/07(日) 01:38:57.92ID:Gd+38Xi7
1
0267デフォルトの名無しさん2016/08/07(日) 01:39:15.72ID:Gd+38Xi7
2
0268デフォルトの名無しさん2016/08/07(日) 01:39:31.82ID:Gd+38Xi7
3
0269デフォルトの名無しさん2016/08/07(日) 01:40:00.50ID:Gd+38Xi7
4
0270デフォルトの名無しさん2016/08/07(日) 01:40:27.87ID:Gd+38Xi7
5
0271デフォルトの名無しさん2016/08/07(日) 01:41:06.65ID:Gd+38Xi7
6
0272デフォルトの名無しさん2016/08/07(日) 01:41:28.39ID:Gd+38Xi7
7
0273デフォルトの名無しさん2016/08/07(日) 01:41:51.43ID:Gd+38Xi7
8
0274デフォルトの名無しさん2016/08/07(日) 01:42:18.98ID:Gd+38Xi7
9
■ このスレッドは過去ログ倉庫に格納されています