[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/01 22:33 / Filesize : 298 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました



1 名前:デフォルトの名無しさん(ワッチョイ 5394-4hBO) mailto:sage [2016/12/27(火) 02:07:41.47 ID:HrGPkQcW0.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

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

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

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

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configure

608 名前:デフォルトの名無しさん (ワッチョイ 2790-jWyY) mailto:sage [2017/02/14(火) 12:37:48.40 ID:Nim8Pln30.net]
>>588
すいません、関係する組み合わせとはなんですか?

609 名前:デフォルトの名無しさん (ワッチョイ df6d-DR2M) mailto:sage [2017/02/14(火) 12:55:23.20 ID:XyImroZT0.net]
初心者は大人しくバックトラックで解いた方がいいんでないの

610 名前:デフォルトの名無しさん (ワッチョイ df6d-DR2M) mailto:sage [2017/02/14(火) 12:58:55.86 ID:XyImroZT0.net]
何らかの事情で劇的な速度が欲しいならSATソルバー使う方が速い

611 名前:デフォルトの名無しさん (ワッチョイ 93bb-cGUq) mailto:sage [2017/02/14(火) 13:09:33.16 ID:dpHbb6/Q0.net]
>>597
9*(決まってない空白数)だけパターン数があると考えてすべて整合性チェックすればいいんだよ。
あとは自由に最適化しろ。

612 名前:デフォルトの名無しさん (ワッチョイ 635b-t8AD) mailto:sage [2017/02/14(火) 17:38:40.59 ID:BsjgcFem0.net]
複数選択可のListBoxのSelectedIndexChangedイベントにおいて、
今まさに選択されたアイテムのindex (VBのListBox.ListIndexのような感じです)を得るにはどうすれば良いですか。

613 名前:デフォルトの名無しさん (ラクッペ MMc7-iIq0) mailto:sage [2017/02/14(火) 18:37:27.66 ID:e3yTVnI+M.net]
formアプリとただのASP.NETと
VBはもうサポートしなくて良いよね

分散しまくってるから
リソース集中して欲しい

614 名前:デフォルトの名無しさん (アウアウウー Sab3-cZcy) mailto:sage [2017/02/14(火) 18:42:24.50 ID:PdY4D7f4a.net]
>>601
そのイベントって選択解除や選択されている項目を削除した時も発生するし、
ListBoxってShiftキー押しながらクリックで複数項目を選択したり解除したりできた気が

615 名前:デフォルトの名無しさん (ワッチョイ 635b-t8AD) mailto:sage [2017/02/14(火) 20:04:39.55 ID:BsjgcFem0.net]
>>603
言い忘れていましたが、C# 2.0の話です。
ListBoxのプロパティSelectionModeをMultiSimple等にすると、複数選択できるようになります。
何をやりたいかというと、1つのListBoxで項目を6個以上選択できない(5個までなら選択できる)ようにしたいのです。

616 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/14(火) 20:29:01.97 ID:8xZyzg4v0.net]
>>587
C#ってかアルゴリズムだと思うけど9×9の数独なら力技でもそんな時間かからんぞ
空きマスに1置けるか?置けないなら2置けるか?
ってチェックしていって置ける数字がでたら次の空きマスに移動
移動した先で置ける数字がなくなったら1個戻って数字を変える
みたいな処理を再起で組めばいける
この手法だと回答が複数ある時、あるいはパズルとして成立しない時(途中で手詰まりになる時)でも無理やり回答を出してしまうっていう問題があるけど



617 名前:デフォルトの名無しさん (ワッチョイ 2790-jWyY) mailto:sage [2017/02/14(火) 22:01:03.75 ID:Nim8Pln30.net]
>>605
空きマスに1置けるか?置けないなら2置けるか…ってやっていくのはわかるんですが
自分がやっている縦横同ブロック検索しておける数字が一つに絞り込めた場合、代入するようにしてるんですがこれ違うんですか?

618 名前:デフォルトの名無しさん (ブーイモ MM4b-ZWt2) mailto:sage [2017/02/14(火) 22:09:41.60 ID:mO6RmRZWM.net]
>>606
数独を解いたことあれば、それだけではクリア出来ないのは良くあることなんだけど……

619 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/14(火) 22:11:49.93 ID:8xZyzg4v0.net]
>>606
一つに絞り込めなくても現時点で置けるならとりあえず置いて次に行くの
順次進めて行ってどこかのマスで何の数字も置けないようになってしまったら今まで置いてきた数字に何処かに誤りがあったってことだから戻って別候補にするって感じ

マスに入る数字を一つに絞り込んで進めていくやり方は数独のテクニックを理解してそれをプログラミングしていく必要がある
上級問題は当然そのテクニックも難解になるから上下左右ブロックを見るだけ程度のテクニックだけでは解ききれない

問題制作側で回答チェック等まで踏まえたツールなんかを作成するなら当然このあたりまで考慮して製作する必要があるけど
ひとまず回答だけ求めるなら前半に書いた手法で十分だよ

620 名前:デフォルトの名無しさん (ブーイモ MM4b-ZWt2) mailto:sage [2017/02/14(火) 22:19:23.18 ID:mO6RmRZWM.net]
あれ?そもそも最上段の左から2番目埋まってないな。
やろうとしてるロジックも未完成なんじゃね?

621 名前:デフォルトの名無しさん (ワッチョイ 7230-VyiL) mailto:sage [2017/02/14(火) 22:25:20.31 ID:5IUCJa7e0.net]
もう諦めてsquatでもしてこいよ

622 名前:デフォルトの名無しさん (ワッチョイ 2790-jWyY) mailto:sage [2017/02/14(火) 22:40:12.49 ID:Nim8Pln30.net]
>>608
再起がすごい苦手なんですが・・・どこまで潜っていくのかわからないですし
どう抜ければどう書けばいいのかもわかりません

623 名前:デフォルトの名無しさん (アウアウウー Sab3-cZcy) mailto:sage [2017/02/14(火) 22:45:26.95 ID:PdY4D7f4a.net]
>>604
完璧じゃないけどこの辺で妥協?

IEnumerable<object> mPrevSelectedItems = new object[0];
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  var selectedItems = listBox1.SelectedItems.OfType<object>();
  var removeCount = selectedItems.Count() - 5;
  if (removeCount > 0)
  {
    var ex = selectedItems.Except(mPrevSelectedItems);
    var skipCount = ex.Count() - removeCount;
    if(skipCount >-1)
    {
      var items = ex.Skip(skipCount);
      Array.ForEach(items.ToArray(), x => listBox1.SelectedItems.Remove(x));
    }
  }
  mPrevSelectedItems = selectedItems.ToArray();
}

思ったより面倒くさいなあ

624 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/14(火) 23:13:26.80 ID:8xZyzg4v0.net]
>>611
別に実装は再起じゃなくても問題ないよ
アルゴリズムが理解できれば普通にループと分岐だけで組める

625 名前:デフォルトの名無しさん (ワッチョイ 7bdc-3OfB) mailto:sage [2017/02/14(火) 23:35:48.88 ID:+J5Ev49B0.net]
>>611
こういう問題は手続きじゃなくてトップダウンで関数型的に考えると機械的に解ける

解 = 数独を解く(初期状態, []).FirstOrDefault();
数独を解く = (状態, 探索済) => 解けている(状態) ? [状態] : 次の候補(状態, 探索済).SelectMany(候補 => 数独を解く(候補, 探索済 + 状態)).First();
次の候補 = (状態, 探索済) => 数字を適当に1つ置いてみるときの全ての置き方(状態).Where(状態 => 矛盾してない(状態) && 探索済.含まない(状態));
数字を適当に1つ置いてみるときの全ての置き方 = 状態 => …

こんな感じで大雑把なところから細部を詰めていくの
具体的な動作をイメージしづらいかもしれないけど、結局やってることは ID: 8xZyzg4v0 と同じ

626 名前:デフォルトの名無しさん (ワントンキン MM62-S0So) mailto:sage [2017/02/14(火) 23:40:20.02 ID:UB3JXf9tM.net]
数独はSQLで解くのがトレンド



627 名前:デフォルトの名無しさん (ワッチョイ 323c-zlRv) mailto:sage [2017/02/14(火) 23:46:21.93 ID:3qnQ1Gfx0.net]
>>606
ここら辺を参考にしてみるとか
https://www.slideshare.net/mobile/atmarksharp/ss-45348313

628 名前:デフォルトの名無しさん (ワッチョイ 93bb-cGUq) mailto:sage [2017/02/15(水) 06:53:14.94 ID:apHpeiac0.net]
自分の頭で解けない奴には、その解法を仕様化できるわけがない。

629 名前:デフォルトの名無しさん (スフッ Sd52-AyEu) mailto:sage [2017/02/15(水) 08:38:52.62 ID:4NekN3gFd.net]
9(縦)x9(横)x9(ありえる数字)のboolの配列持って、
まず既知のセルの8個の数字を消しこんで、
その次に、全セルを順番に縦、横、3x3のブロックでそれぞれ、あり得ない数字(≒縦、横、ブロック内の、ひとつだけになっているセル)を消しこんでいって、一周しても何も消せなくなるまで回って、
その後、ありえる数字の組み合わせの総当りにした方が多分良い。
ありえる数字の組み合わせを考えるから辛い。
あり得ない数字は別のセルから導出できるんだし。

630 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/15(水) 08:55:15.39 ID:yJTbA8M80.net]
>>618
処理が前後半の2段階になってるけど質問者は前半だけじゃ解けない問題に直面して困ってる&後半だけで解ける
って状態なんだからひとまず前半は要らない
後半作って上手く行ったなら処理速度向上とか考慮して前半みたいな処理を追加すればいい

631 名前:600 (ワッチョイ 635b-t8AD) mailto:sage [2017/02/15(水) 09:42:28.85 ID:J55wC/o80.net]
>>612
うまくいきました。やはり選択されたアイテムを覚えさせておく方法が良いようですね。
どうもありがとうございました。

632 名前:デフォルトの名無しさん (ワッチョイ df07-VyiL) mailto:sage [2017/02/15(水) 12:45:30.38 ID:uvXQ5Mwv0.net]
数独ソルバー程度で悩む奴もいるんだなあ
俺は厨房のころ作ったけど

633 名前:デフォルトの名無しさん (スフッ Sd52-AyEu) mailto:sage [2017/02/15(水) 13:17:31.37 ID:4NekN3gFd.net]
>>619
うーん、総当りって現実的な時間には終わらんと思うが。

634 名前:デフォルトの名無しさん (ワッチョイ df6a-VyiL) mailto:sage [2017/02/15(水) 13:59:57.66 ID:1Sp8YgZp0.net]
いまPythonで書いてみたけど5年前のMacMiniでも数秒で終わる

635 名前:デフォルトの名無しさん (ワッチョイ df6a-VyiL) mailto:sage [2017/02/15(水) 14:06:17.53 ID:1Sp8YgZp0.net]
ideoneでも余裕で動いた
https://ideone.com/TSJo4P

636 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/15(水) 14:39:28.56 ID:yJTbA8M80.net]
>>622
作ったことないんでしょ
9✕9なんて一瞬、処理途中を描画しながらで数秒レベル

組み合わせは最大81の9乗あるから仮数字を全部入れてチェックなんて手法取ったらそら終わらん。
順番に仮置きして矛盾が発生した場合戻るってすれば、いわゆる枝切りみたいなのがどんどん発生するからすぐ終わる
計算量は知らん



637 名前:デフォルトの名無しさん (スフッ Sd52-AyEu) mailto:sage [2017/02/15(水) 16:40:03.68 ID:4NekN3gFd.net]
>>625
矛盾があれば手戻り、と、矛盾を刈り込むのとはあんまり変わらん気がするけど。
そりゃどちらでも描画してるうちに終わるだろうけど、
どちらでもない方を言ってるんだよ、その愚直に置く方。

638 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/15(水) 16:53:27.86 ID:yJTbA8M80.net]
>>626
矛盾があれば手戻りは計算量が多くなるから基本コンピュータじゃないと現実的じゃない
その代わりどんな問題も解ける(以前書いたような例外はある)
計算量が多いって言ってもコンピュータからすれば大したことは無い

矛盾を刈り取りは一般的に人が解く際の行動をプログラミングしたものなので解法(テクニック的なもの)を実装することができればどんな問題でも解ける
その代わり数独であってもテクニックは難解な物がある

で刈り取りした後に手戻りすればいいじゃん、って言うけど手戻りだけで事足りるのになんでいきなり両方実装すんの?って話

ぶっちゃけ初めは現実時間で終わらんような愚直な実装でもいいと思う
そこからチューニングするとか何かアルゴリズム考えるとかすれば学べるんだから

639 名前:デフォルトの名無しさん (スフッ Sd52-AyEu) mailto:sage [2017/02/15(水) 17:59:08.57 ID:4NekN3gFd.net]
>>627
それだと、矛盾が無いだけの解がただの計算順で一意に決まってしまうじゃん。
根本的な解決ではないと思うが。

640 名前:デフォルトの名無しさん (ワッチョイ 7642-LB0c) mailto:sage [2017/02/15(水) 19:40:01.33 ID:yJTbA8M80.net]
>>628
だからその問題点は一番初めに言ってるじゃん
話ずらしまくるのやめよ?

641 名前:デフォルトの名無しさん (ワッチョイ df6d-VyiL) mailto:sage [2017/02/15(水) 19:43:20.79 ID:W/gL5Tp30.net]
>>628
だから何だ質問者がいつその条件を求めたんだよ
コード書いたこともねえ雑魚は引っ込んでろ

642 名前:デフォルトの名無しさん (スププ Sd52-YCZx) mailto:sage [2017/02/15(水) 20:47:50.66 ID:kYO6iRfyd.net]
投稿者は、この解を得るアルゴリズムを作成するというロマンがあるんだよ。

643 名前:デフォルトの名無しさん (ブーイモ MM52-CvLw) mailto:sage [2017/02/15(水) 20:51:44.83 ID:GPHsk9GRM.net]
>>628
仮定法でも全ての解は得られるよ?
>>614のアルゴリズムでFirstを外せばできるはず

644 名前:デフォルトの名無しさん (ワッチョイ 173c-CIv3) mailto:sage [2017/02/15(水) 21:22:49.38 ID:ZsrpE5Vs0.net]
APIからwebsocketをつかってJSONを取得したいのですがネットを色々見てもさっぱりわかりません。
具体的には
https://corp.zaif.jp/api-docs/
のストリーミングAPIのbtc_jpyです。
ヒントや参考になるサイトでも構いません。よろしくお願いします。

645 名前:デフォルトの名無しさん (ワッチョイ e223-CIv3) mailto:sage [2017/02/15(水) 22:38:19.69 ID:DiO+GUbF0.net]
>組み合わせは最大81の9乗あるから
本質的にはどうでも良い話だが、「同じ行、列には同じ数字は使えない」と言うルールを無視しすぎていて気になっちまう
「ものすごく多い」ってことが表現できているから何も問題ないんだけどな

646 名前:デフォルトの名無しさん (ブーイモ MM52-CvLw) mailto:sage [2017/02/15(水) 22:42:17.14 ID:9FXA/5kCM.net]
>>633
クライアントライブラリあるじゃん
C#用はないみたいだけどC#わかるんならJavaなら楽勝だろ



647 名前:デフォルトの名無しさん (ワッチョイ eb77-6bgE) mailto:sage [2017/02/16(木) 00:10:21.41 ID:QO0gpLt00.net]
>>633
codeprojectにjsonビューアのソースがあったような

648 名前:デフォルトの名無しさん (ワッチョイ 3b3c-P9CU) mailto:sage [2017/02/16(木) 00:40:31.38 ID:/E7gOtLl0.net]
>>635
申し訳ないです。Javaのを見てもわかりませんでした。
>>636
jsonの処理は何とか出来るのですがwebsoketでの取得がわからないんです

649 名前:デフォルトの名無しさん (ワッチョイ 5f30-O7jY) mailto:sage [2017/02/16(木) 05:22:57.59 ID:1M26REHO0.net]
そんなに分かりにくいところあるか…?
https://ideone.com/O78ino

JSONの切れ目は自分で探して
金儲けのためならその程度の維持は出して見せろ
その程度の才能もないなら発注サイトに行って金払って作ってもらえ

650 名前:デフォルトの名無しさん (スププ Sd7f-6skL) mailto:sage [2017/02/16(木) 07:32:00.22 ID:/4MLopCid.net]
偉そうに

651 名前:デフォルトの名無しさん (ワッチョイ 3b3c-P9CU) mailto:sage [2017/02/16(木) 10:57:00.19 ID:/E7gOtLl0.net]
>>638
これは参考になりそうです。ありがとうございます。

652 名前:デフォルトの名無しさん (オッペケ Sr9f-PPpI) mailto:sage [2017/02/16(木) 12:50:57.39 ID:Fl7cxYnSr.net]
WebBrowserって今後もずっとIEなのかね?
Edgeにはならないんだ?

653 名前:デフォルトの名無しさん (ブーイモ MM7f-FKuk) mailto:sage [2017/02/16(木) 15:05:24.57 ID:SJI/N2PkM.net]
絶対にない
WinFormsが業務向けのプラットフォームであること、既に開発が終了していることを忘れてはいけない

654 名前:デフォルトの名無しさん (ワッチョイ 8bbb-eq+O) mailto:sage [2017/02/16(木) 15:33:56.56 ID:QchVkuhj0.net]
結局、Winform最強か。

655 名前:デフォルトの名無しさん (アウアウオー Sa7f-xIS6) mailto:sage [2017/02/16(木) 16:23:17.22 ID:/R92/z+7a.net]
WebBrowserコントロールはIWebBrowserのだからIEのままでしょ
EditコントロールがEditで、リッチエディットコントロールになってないのと似たようなもん
WindowsUI.Xaml.WebViewかそんなとこでEdgeコントロールとしてはもう既に実装されてるんじゃないのかな

656 名前:デフォルトの名無しさん (オッペケ Sr9f-PPpI) mailto:sage [2017/02/16(木) 17:18:26.44 ID:Fl7cxYnSr.net]
そうなのかあ
しかし困る人多いよね



657 名前:デフォルトの名無しさん (アウアウウー Sa1f-Tc/C) mailto:sage [2017/02/16(木) 18:03:45. ]
[ここ壊れてます]

658 名前:02 ID:nVGauASoa.net mailto: まだXP使ってるところだって山ほどあるのに7/8.xを考えなくてよくなるのなんか何年後よ []
[ここ壊れてます]

659 名前:デフォルトの名無しさん (ワッチョイ 4bd6-eq+O) mailto:sage [2017/02/16(木) 18:53:57.26 ID:yaBP1ZBT0.net]
レジストリいじればEdge相当になったはず

660 名前:デフォルトの名無しさん (ワッチョイ 0f9d-eq+O) mailto:sage [2017/02/16(木) 19:19:37.31 ID:cjCClO980.net]
WinFormsの開発再開すればいいのにね

661 名前:デフォルトの名無しさん (オッペケ Sr9f-PPpI) mailto:sage [2017/02/16(木) 19:33:08.37 ID:Fl7cxYnSr.net]
>>647
そうなのかー
しかしユーザーがEdge持ってるとは限らないから面倒だね

662 名前:610 (ワッチョイ 9b90-XdR7) mailto:sage [2017/02/17(金) 23:35:39.67 ID:8hvoyQw40.net]
レス遅くなってしまってすいません

>>618の後半なんですが、
1,候補の中の確定できない数字をとりあえず入れてみる
2.次のマスに移動、数値が入れられなかったら1に戻る
この繰り返しですよね?もしこれを複数回繰り返して戻らない場合2回以上前に入れた数値まで戻らないといけない場合ってありますか?

663 名前:デフォルトの名無しさん (ワッチョイ 0f42-1n7Z) mailto:sage [2017/02/18(土) 02:25:11.55 ID:f0aH9wlg0.net]
>>650
2の手順は1に戻るじゃなくて1つ前に数字を入れたマスに戻るだね
1個前に入れたマスに戻って別の数字を探しても見つからなければ更に1個前に戻る
これを繰り返す
当然戻りまくって最初のマスに戻ることもある最初に入れた仮数字が間違ってたってことだから

要は全数字を入れるパターンを検索して矛盾が出ないパターンを求めてる
ただし途中で矛盾が出たら以降はそのパターンに紐づく内容は無視することで大幅に検索回数を削減できて結果的にコンピュータレベルの計算速度を用いればそれなりの速度で検索可能って寸法

理解が難しければ空きマスが超少ない問題で手を使って動きを確かめてみると良いかも
別にこの問題に限った話ではないけど大抵のプログラムは原理を理解できないと実装できないからね

664 名前:610 (ワッチョイ 9b90-XdR7) mailto:sage [2017/02/18(土) 03:12:52.58 ID:zyhHTWXk0.net]
>>651
原理はわかってはいるつもりなんですが、どう書けばいいのかわかりません
1、4、7と入れてきて7の次に入れるものがない場合、4を変更しないといけないわけですがこれをどうやって渡すか
またもう一つ戻らないといけない場合、自分の理解の範疇を超えオーバーフローしてしまいます
他人のソースを読んでも頭に入ってきません

665 名前:デフォルトの名無しさん (ワッチョイ 0f42-1n7Z) mailto:sage [2017/02/18(土) 04:35:14.78 ID:f0aH9wlg0.net]
>>652
あらま、その段階か

例えば仮数字を入れて次に進む時、今仮数字を入れた場所を記憶しておく配列を用意しておくとかどうだろう
進むたびに配列に仮数字を入れた場所が順次追加されていく感じ
戻る時は後ろから順に見ていけばいい
戻ってまた進む時は用意した配列を再度進むところから上書きする感じ

「5」番目のマスに1を入れた
「8」番目のマスに4を入れた
「10」番目のマスに入れられる数字がない
「8」番目に戻る
8番目には4が入ってるけどダメらしいので5以降で置ける数字無いか確認
それでも無ければ「5」番目に戻る

用意する配列には「5 8 10」って入ってるってことね
この配列のどこを今操作しているか?を指し示す変数もあったほうが分かりやすいかもね

○番目って言うのは左上のマスを1、右下のマスを81と仮定しての話ね
XYで管理してるならこの配列を2次元にしても良い

そんな効率良い方法じゃないけど直感的には理解はしやすいかと思うけどどうだろう
他に何か分かりやすい案があるかもしれん

666 名前:610 (ワッチョイ 6b90-XdR7) mailto:sage [2017/02/18(土) 06:29:59.40 ID:ULV0oBLe0.net]
>>653
ありがとうございます、これだと書ける気がします


あと配列の中にある値のインデックスをLINQで取得しているのを拡張メソッドで定義したいですがうまくいきません
First()やCount()の定義を見よう見真似で書きましたが、Whereに何を入れたらいいのかわかりません

public static Type Index<Type>(this IEnumerable<Type> source, Func<Type, bool> predicate)
where Type : IEnumerable<Type>
{
return source.Select((value, index) => new { Index = index, Value = value })
.Where(item => )
.Select(item => item.Value).FirstOrDefault();
}

ひょっとして述語は引数として受けられませんか?



667 名前:デフォルトの名無しさん (ワッチョイ 8b7b-eq+O) mailto:sage [2017/02/18(土) 08:10:24.40 ID:bn0z7G5m0.net]
あえてLinqで書くならこうかな?でもこういう場合foreachで書く方が速いし自然だと思う

public static int Index<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
  try
  {
    return source.Select((value, index) => new { Index = index, Value = value })
        .First(item => predicate(item.Value)).Index;
  }
  catch (InvalidOperationException) { return -1; }
}

668 名前:デフォルトの名無しさん (ワッチョイ 0f42-1n7Z) mailto:sage [2017/02/18(土) 09:33:35.33 ID:f0aH9wlg0.net]
プログラム初心者だと思ってたら突然linqでてきてワロタ
俺には>>653の説明でなんで>>654に行けたか不思議だよ
linqは奥が深いけど面白いね

669 名前:デフォルトの名無しさん (ワッチョイ 9b7b-g7u9) [2017/02/18(土) 12:02:11.53 ID:H3MLhpM30.net]
OpenFileDialog.ShowDialogを使用するとフリーズします。
昔からある障害のようなんですが、
>cymon.sysというファイルの排他制御関連の処理に不具合があるのが原因
らしいのですが、該当ファイルはありません。
他のアプリの排他制御関連のバグなんて特定出来る気がしません。

どうすれば正常に動かせますか?

670 名前:デフォルトの名無しさん (スププ Sd7f-6bgE) mailto:sage [2017/02/18(土) 12:12:10.55 ID:F1GmP7Hpd.net]
>>657
もうちょい詳しく。
再現するOSや、不具合が再現するソースとかないん?

671 名前:デフォルトの名無しさん (ワッチョイ 0f7b-TuOZ) mailto:sage [2017/02/18(土) 12:18:44.45 ID:AobYyoSr0.net]
ニコリの数独・カックロを、力任せに解く方法か?
バックトラック法だろ

「バックトラック法 数独」で検索!

672 名前:デフォルトの名無しさん (ワッチョイ 0f9d-eq+O) mailto:sage [2017/02/18(土) 12:19:58.05 ID:7QDYBSyf0.net]
>>657
https://www.cyphertec.co.jp/news/cymon_revision.html
これのことだとしたら、修正プログラム入れるしかないのでは?
cymon.sysが本当に存在しないならもっと情報が必要だね

673 名前:デフォルトの名無しさん (JP 0H1f-vlft) mailto:sage [2017/02/18(土) 12:43:04.59 ID:1c96nb+dH.net]
特定のソフト入れた時にそのソフトのバグで干渉するってだけやん
入れてないなら関係ないし入れてるなら
メーカーの修正あてるかアンインストールするかの2択やろ

674 名前:デフォルトの名無しさん (ワッチョイ fb0d-NHlF) [2017/02/18(土) 14:47:28.87 ID:lgYaiLIy0.net]
CookieContainerの中身をWPFのDataGridで表示したいのですがどうすればいいですか?

675 名前:デフォルトの名無しさん (ワッチョイ df4c-6bgE) mailto:sage [2017/02/18(土) 15:01:37.60 ID:oF9zQOK10.net]
そこでデーターバインディングでづよ

676 名前:デフォルトの名無しさん (ワッチョイ df4c-6bgE) mailto:sage [2017/02/18(土) 15:25:02.48 ID:oF9zQOK10.net]
CookieCollection collection = new CookieCollection();
for (int i = 0; i < 16; i++)
{
collection.Add(new Cookie() { Name = i.ToString() });
}
dataGrid.ItemsSource = collection;



677 名前:デフォルトの名無しさん (ワッチョイ df4c-6bgE) mailto:sage [2017/02/18(土) 15:25:23.75 ID:oF9zQOK10.net]
あとは自分で

678 名前:デフォルトの名無しさん (ワッチョイ fb0d-NHlF) [2017/02/18(土) 19:51:02.62 ID:lgYaiLIy0.net]
CookieContainerをBindingさせるのは無理なんですね
そうなるとCookieContainerからCookieCollectionを取り出す必要が出てきますが
どうすれば関連付けされているUriを使わずにCookieCollectionを取り出せますか?(forやforeachを使いたい)

679 名前:デフォルトの名無しさん (ワッチョイ 0f7b-eq+O) mailto:sage [2017/02/19(日) 01:31:58.50 ID:bXEy6Thf0.net]
他のツールなんかで動画とか音楽ををダウンロードしながらそれを開いて
先頭から順に読み込むツールを作ろうと思ってるんだけど

System.IO.FileStream fs = new System.IO.FileStream(@"C:\test.mp3",System.IO.FileMode.Open)

例えばこんな感じでmp3を開くとした場合って開いた瞬間のデータ量しか取得できないですよね?
増えていってるデータを順に取得していくいい方法って無いですかね?

680 名前:デフォルトの名無しさん (アウアウウー Sa1f-Tc/C) mailto:sage [2017/02/19(日) 02:03:05.71 ID:6CKE/L0Oa.net]
>>667
タイマーでも使ってポーリングするだけじゃないの?

681 名前:デフォルトの名無しさん (ワッチョイ 8bbb-eq+O) [2017/02/19(日) 05:52:50.50 ID:mRSsjBQo0.net]
日本ではダウロンードは違法。

682 名前:デフォルトの名無しさん (ワッチョイ 6f20-eq+O) [2017/02/19(日) 10:21:49.03 ID:7g+LYPG/0.net]
音声合成APIを使ってみたくて
下記のサンプルコードを実行したのですが
音声が再生された後にプログラムが終了せず
残っています

どのようにすれば音声再生後にプログラムが
終了するでしょうか?

static void Main(string[] args)
{
var player = new SoundPlayer();
var http = new HttpClient();
// BASIC認証
http.DefaultRequestHeaders.Add("Authorization"
, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes("hoge")));
// POST要求
http.PostAsync("https://api.voicetext.jp/v1/tts", new FormUrlEncodedContent(
new[]{
// リクエストパラメータ
new KeyValuePair<string , string>( "text" , "test" ),
new KeyValuePair<string , string>( "speaker" , "haruka" ),
}
)).ContinueWith(async task =>
{
// 音声データでない場合、例外が発生するので、適切な対処すべき…
player.Stream = await task.Result.Content.ReadAsStreamAsync();
player.Play();
});

Console.ReadLine();
}

683 名前:デフォルトの名無しさん (ワッチョイ eb1e-1BHe) mailto:sage [2017/02/19(日) 10:29:46.11 ID:FVPzcms80.net]
>>670
再生後、コンソールでEnterキーを押す
または最後のConsole.ReadLineを削除

684 名前:デフォルトの名無しさん (ワッチョイ eb77-B7Z5) mailto:sage [2017/02/19(日) 10:37:13.44 ID:gToSbtQT0.net]
>>671
後者じゃ、再生終わる前に終了しないかな

685 名前:669 (ワッチョイ 6f20-eq+O) [2017/02/19(日) 10:41:11.22 ID:7g+LYPG/0.net]
Console.ReadLineの削除で
プログラムが終了したので悩みが解消したのですが、
音声再生が開始される前にプログラムが終了するという
新しい悩みが生まれました

音声再生の完了をコールバック等で受け取る方法は
あるでしょうか?

686 名前:デフォルトの名無しさん (ワッチョイ eb77-B7Z5) mailto:sage [2017/02/19(日) 10:54:41.14 ID:gToSbtQT0.net]
>>673
player.Play();の次の行にEnvironment.Exit(0);でどうですか



687 名前:デフォルトの名無しさん (ワッチョイ 6f20-eq+O) [2017/02/19(日) 11:06:34.51 ID:7g+LYPG/0.net]
>>674
試してみましたが、音声再生前にプログラムが終了しました

javascriptなら、コールバックとか取れそうですが
C#はいまひとつ解らず

688 名前:デフォルトの名無しさん (ワッチョイ 6bdc-fFgi) mailto:sage [2017/02/19(日) 11:11:22.59 ID:7Avz8j0c0.net]
最後にTask.Waitしろ

689 名前:デフォルトの名無しさん (ワッチョイ eb77-B7Z5) mailto:sage [2017/02/19(日) 11:28:40.83 ID:gToSbtQT0.net]
>>675
>>674やった上で、player.Play()をplayer.PlaySync()に書き換えて

690 名前:デフォルトの名無しさん (ワッチョイ 6f20-eq+O) [2017/02/19(日) 11:35:24.12 ID:7g+LYPG/0.net]
player.Play();
task.Wait();

と書いてみたのですが
音声が再生される前に
プログラムが終了します

URIにPOSTする処理は
リクエストしたら状態が取れないのかなという
気がしています

691 名前:デフォルトの名無しさん (ワッチョイ 6f20-eq+O) [2017/02/19(日) 11:38:27.06 ID:7g+LYPG/0.net]
>>677

player.PlaySync();
Environment.Exit(0);

としましたが、音声再生の前に
プログラムが終了しました

692 名前:デフォルトの名無しさん (ワッチョイ eb77-B7Z5) mailto:sage [2017/02/19(日) 11:40:39.60 ID:gToSbtQT0.net]
>>679
元のConsole.ReadLine();消してちゃってない?
これも必要だよ。

693 名前:デフォルトの名無しさん (ワッチョイ 6f20-eq+O) [2017/02/19(日) 11:48:07.03 ID:7g+LYPG/0.net]
>>680
音声再生の後にプログラムが終了しました
期待通りの動作です

ありがとうございます

694 名前:デフォルトの名無しさん (ワッチョイ 0f7b-eq+O) mailto:sage [2017/02/19(日) 17:21:32.80 ID:bXEy6Thf0.net]
>>668
まだ勉強し始めた素人なのでポーリングというやり方があるんですね。
試してみます、ありがとうございました。

>>669
再生が最後まで行く、もしくはソフトを閉じる時に消去すれば
キャッシュという形になるから違法ではないと思いますし、
たしかあの法律は違法にアップロードされたコンテンツ(ゲームや音楽)を
知りつつダウンロードする行為が違法なんですよね?
YouTubeやTwitch、ニコ生などのライブ配信や動画を専ブラのような形で
なおかつ自分で使いやすいように作るのは違法でないという認識なのですが間違っていますでしょうか?

695 名前:デフォルトの名無しさん (ワッチョイ 5b19-S9Lo) mailto:sage [2017/02/19(日) 17:23:40.86 ID:djgzWXGW0.net]
保存しなきゃセーフでしょ
ブラウザを作るのに認可がいるわけじゃないし

696 名前:610 (ワッチョイ 6b90-XdR7) mailto:sage [2017/02/20(月) 01:42:50.37 ID:Vf7595PK0.net]
>>655
foreachで書く方法がわかりません、どんなふうに書くのでしょうか?



あと条件にあったインデックスを全て返す拡張メソッドを作りたいのですが、うまくいきません

int{} num = { 11, 12, 13, 14, 15 }
これで条件を「x > 12」にした場合「2、3、4」と返ってきてほしいのですがチャレンジしてもできません

return source.Select((value, index) => {if(predicate(value) return index; return 0; })
こういうふうにを書くと「x > 12」の場合「0,0,2,3,4」と返ってきてしまいます
どうかけばいいかヒント教えてください



697 名前:デフォルトの名無しさん (ワッチョイ eb77-B7Z5) mailto:sage [2017/02/20(月) 02:30:59.52 ID:M2SnzGbV0.net]
>>684
値が要らない項目は、Select()する前にWhere()で弾いとかないと。

698 名前:610 (ワッチョイ 6b90-XdR7) mailto:sage [2017/02/20(月) 03:25:39.28 ID:Vf7595PK0.net]
public static IEnumerable<int> IndexCollection(IEnumerable<Type> source, Func<Type, bool> predicate)
{
return source.Where(_ => predicate(_)).Select((value, index) => index);
}

こういうことですか?でもなぜかこう書くと評価されなくて返り値がnullのままになります

var list = num.Where(_ => _ > 12).Select((value, index) => index);

こう書くときちんと評価されるのですが・・・さっぱりわかりません

699 名前:デフォルトの名無しさん (ワッチョイ 8b7b-eq+O) mailto:sage [2017/02/20(月) 03:28:01.67 ID:Cim83SJm0.net]
>>684
別に難しくなくて、素直に書けばいいと思うけど

public static int FirstIndex<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
  int index = 0;
  foreach (var val in source)
  {
    if (predicate(val)) return index;
    index++;
  }
  return -1;
}

条件にあったのも全て返すなら yield return を使う

public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
  int index = 0;
  foreach (var val in source)
  {
    if (predicate(val)) yield return index;
    index++;
  }
}

700 名前:デフォルトの名無しさん (ワッチョイ 8b7b-eq+O) mailto:sage [2017/02/20(月) 03:33:55.65 ID:Cim83SJm0.net]
無理矢理Linqで書くならこんな感じだろうか
public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
  return source.Select((value, index) => new { Index = index, Value = value })
     .Where(x => predicate(x.Value)).Select(x => x.Index);
}

値が0以上限定ならこんな風にも書ける
public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
  return source.Select((value, index) => predicate(value) ? index : -1)
      .Where(x => x >= 0);
}

701 名前:デフォルトの名無しさん (ワッチョイ 8b7b-eq+O) mailto:sage [2017/02/20(月) 04:12:20.09 ID:Cim83SJm0.net]
>>686
IndexCollectionの後に<Type>が抜けてるね。あと引数のthisも抜けてる
Linqに慣れてないなら、最初から繋げていかないで一個ずつ結果を見た方がいいよ

var a = num.Where(_ => _ > 12);
var b = a.Select((value, index) => index);

ここではaが {13, 14, 15 } ってリストになる(Whereは条件式でフィルタした新しい配列を作る)
bはその配列をインデックスの値に変換した新しいリストを返すから値は { 0, 1, 2 } となる

あと勘違いしてたけどインデックスは当然0以上なので>>688の後者の書き方で問題なかった

702 名前:デフォルトの名無しさん (ワッチョイ 8bbb-eq+O) [2017/02/20(月) 07:23:54.57 ID:73+nzjfL0.net]
>>683
日本では回避ツール作るのも違法。

703 名前:610 (ワッチョイ 6b90-XdR7) mailto:sage [2017/02/20(月) 10:04:48.66 ID:Vf7595PK0.net]
>>687
yield returnというのを忘れていました

引数のthisを忘れていたのに拡張メソッドみたいに呼べたのが不思議です。エラー出ると思ってました

704 名前:デフォルトの名無しさん (ワントンキン MM7f-Z7AI) mailto:sage [2017/02/20(月) 11:08:17.98 ID:M0lXkX5gM.net]
文字列ポインタを返すC言語のwin32 dll を VS2005のWindowsアプリで利用しているのですが、今までWindowsXPで動作していたものをWindows7で動作させると関数から戻ってくる時に死んでしまいます。情報を送信する旨のダイアログの出るヤツです。

<hoge.dll>
BYTE msg[1024];
BYTE* WINAPI hoge(WORD w)
{
sprintf(msg, "xxx");
return msg;
}
<FormMain.vb>
<DllImport("hoge.dll")>Public Shared Sub hoge(Byval w As Int16) As String
End Function

Dim msg As String = Space(1024)

Call部分-> msg = hoge(0)

dllで領域確保した文字列ポインタをvbで領域確保したString型に代入している部分がおかしいのでしょうか?
同じやり方の別アプリはWindows7でも問題なく動作しているらしいです。
回避策としては、StringBuilderを引数にして情報を取得する方法を考えてますが、原因を知りたいです。
何かヒントを頂けないでしょうか。よろしくお願いします。

705 名前:デフォルトの名無しさん (アウアウウー Sa1f-Tc/C) mailto:sage [2017/02/20(月) 12:12:58.76 ID:OgBdAYpra.net]
>>692
ここC#のスレだよw
インポートした関数のシグネチャはそれで間違ってないと思う
(戻り値の文字列の種類の明示的な指定がない以外は)

だから間違いはそこに書かれていないところにある気がする
知らんけど

706 名前:デフォルトの名無しさん (ワントンキン MM7f-Z7AI) mailto:sage [2017/02/20(月) 13:06:34.63 ID:M0lXkX5gM.net]
>>692
失礼しました。自分が普段C#使ってていつも見ているもので、思わず質問してしまいました。

Stringって純粋な参照型じゃないので、dll内の文字列がアプリ側の確保されたStringにコピーされるものなのか、どうなのか?
と思って質問しました。

問題ないようですので、他の部分を当たってみます。

ありがとうございました。



707 名前:デフォルトの名無しさん (スフッ Sd7f-LjcY) mailto:sage [2017/02/20(月) 13:28:11.49 ID:vCAMt98Xd.net]
ビット数とかかねえ

708 名前:デフォルトの名無しさん (ワッチョイ eb19-sbgu) mailto:sage [2017/02/20(月) 14:07:41.64 ID:w4qWsIgy0.net]
DllImportで返値にStringを使うと対象アドレスのメモリを解放しようとするからその辺のせいかな
ポインタが返される場合IntPtrで受け取るべき
文字列ならMarshal.PtrToStringAuto(/Ansi/Uni)で変換






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<298KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef