- 1 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 12:02:50.03 ID:845Zva4M.net]
- 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part122 echo.2ch.net/test/read.cgi/tech/1468078489/ ■関連スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467142749/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/
- 101 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 13:48:06.96 ID:v7zxzFcD.net]
- >>98
ソースが無いと、何をやろうとしてエラーになってるか分からないっす
- 102 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 13:50:12.58 ID:fyF/wT3P.net]
- value 値が重複
- 103 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:16:18.58 ID:8916Nt3B.net]
- キーのハッシュ値か何かが重複してるんじゃね
- 104 名前:デフォルトの名無しさん [2016/08/03(水) 14:21:55.96 ID:m0rhFcyF.net]
- やろうとしているのは、>>20です。
コードとかあったり、またレスで参考になるのが多いので、三つの関係を二つの関係にして考え直したら詰まっているので聞きに来ました。 俺が持つ写真リスト、友人リストってのをなくして、 単純に写真と友人の関係で考えようとしています。 写真リスト:持っている写真 友人リスト:写真に写っている人達 写真1にはX, Y, Zが写っている 写真2にはX, Wが写っている 写真3にはX, Zが写っている 写真を写真DBに登録→映っている人を友人DBに登録って形にしようとしているところです。 写真DBに写真を登録する時には、紐付け対象の友人DBが存在しないので写真のみ登録して、 友人DBに友人を登録する時には、写真DBのIDを外部キーにしてどの写真の情報なのかも登録しようとしています。 そしたら、登録はできるのですが…友人を登録する時に関係のない写真に新規追加などがされて数が異常に増える問題が起きてしまいます。 mslaboratory.blog.eonet.jp/default/2012/05/entity-framewor-2c13.html を参考にして、写真一枚一枚のDBを抜き出して、UnchangedやAttachとか試みているけど効果がないorエラー頻発… ideone.com/e.js/CrtNh1 コードは必要そうなところを抜き出して書き直したやつが上
- 105 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:30:49.38 ID:m0rhFcyF.net]
- ちなみに参考にしたのは>>40
これを綺麗に書き直したかったけど俺にはできなかった…
- 106 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:35:24.88 ID:8916Nt3B.net]
- 写真に写っている人(1-X, 1-Y など)をレコードにして
そいつが 写真ID と 友人ID をインデックスに持てば後は簡単な気がする テーブルは3つ(写真、友人、リンク情報)
- 107 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:49:42.49 ID:m0rhFcyF.net]
- >>104
三つ目のテーブルの話だよね それも考えたんだけど中間テーブルとかの話で勝手に作られるってあるみたいだから それを利用しようとして見たら本当にテーブルできてる ただ異常に値が増えるから困ってるってとこですわぁ…
- 108 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:01:58.98 ID:uW5WiLiF.net]
- 完全にDBの構造の話だな。。。
テーブルは「写真、友人、写真に友人が載っているリスト、写真に友人が載っているリスト詳細」で、定義は以下。 写真{ PK ID、 ファイル名 } 友人{ PK ID、 名前 } 写真に友人が載っているリスト{ PK ID、 FK 写真に友人が載っているリスト詳細のID、 } 写真に友人が載っているリスト詳細{ PK ID、 PK( FK 友人.ID、 FK 写真.ID ) } DBの正規化的には「写真に友人が載っているリスト」は有った方がいいが、 理解できないうちは作らなくてもいい。
- 109 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:03:02.84 ID:uW5WiLiF.net]
- >>105
先にテーブルを自分で作って、それをマッピングすればいいんじゃないの?
- 110 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:06:36.06 ID:pX27JEVl.net]
- >>103
>>40 だけど、中間テーブルのことは難しく考えなくてもいいんじゃない? せっかく勝手にORマッピングしてくれてるのだし。 書き直して動かないなら、やはりソースを見たいな。
- 111 名前:デフォルトの名無しさん [2016/08/03(水) 15:06:56.64 ID:m0rhFcyF.net]
- >>106-107
答えてくれてありがとう。 個人的な課題の話で、構造を書き換えるのが無理なんだわ… >>106のはおそらくクラス設計からやり直せって話なんだろうけども、 今は課題に対してこのクラス設計でって話になっているから変えられない… >>107も同様で、コードファーストなのでデータファーストに切り替えれないんよ
- 112 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:10:48.32 ID:fyF/wT3P.net]
- >>109
中間テーブルが作られるのは確かだけど、 それをコードから操作するためにはコード内に対応するエンティティが必要 ↓ 中間テーブルはフレームワークが勝手に作るのでコードからはエンティティの定義ができない ↓ 中間テーブルが欲しいなら、それにあたるエンティティを自分で作っておく(勝手に作らせない)のが正解 …となるように思うんだけど… 勝手に作られる中間テーブルって、 コードでList(IColelction)として保持しているデータをDBに保存するために フレームワークがフレームワーク自身のためにこっそり作っただけで、 ユーザーに使ってもらうために作ったものじゃないと思うんだよね…
- 113 名前:デフォルトの名無しさん [2016/08/03(水) 15:16:54.63 ID:m0rhFcyF.net]
- >>108
以前はありがとう ドヤアアアアアアアアアしたく
- 114 名前:てこっそりやってたけどできんかった
コードは>>102がほぼ全て データは他のところから取ってきているから書けんけどデータの取得方法だけが違うだけで内容としては変わってないと思う >>110 操作とかデータを取得することはできないってことなのかな 中間テーブルが作られるだけで意味ないとイメージすればよろしいのだろうか ただ、中間テーブル云々の前に 友人に写真リストを追加してDB保存すると、写真に新規追加される問題があるから この問題は解決しないといけないという現状。たぶんこの問題をクリアしないと結局次に進めない 中間テーブルって話ではないんじゃないかなってなってて、上の方のサイトを見てAttachとかやっていたところ [] - [ここ壊れてます]
- 115 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:20:34.60 ID:RQkvsjZ7.net]
- 別手法で解決策を提示するのは相変わらず変わらんのだなwwwww
- 116 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:23:21.26 ID:PbSq5cfW.net]
- エラー自体ははっきりしてるので、、
ちょっと試しに単純なデータでも出るかやってみてよ
- 117 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:23:49.27 ID:uW5WiLiF.net]
- >>109
成る程、、、理解したw 変更できないってのはもどかしいけど、がんがれ。 ADO.NETの話だから専用スレがあったらソッチの方がいいかも知れんよ。 (スレ誘導ウザイ厨に補足されそうで嫌だけど)
- 118 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:25:59.10 ID:m0rhFcyF.net]
- >>113
データを写真以外でも良いから簡単な例でってことかな ちょっと組み換えてやってみるよ >>114 これってC#の話でなくその話なんか 最近C#始めたばかりでどれがどれでなんてわからんのよね
- 119 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:26:09.37 ID:uW5WiLiF.net]
- ID変えてまで変なこと言ってる。。。
あぼ〜んしますね。
- 120 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:28:12.51 ID:uW5WiLiF.net]
- 1対1
1対N N対1 N対N って感じで広げていく方が原因を追いやすい希ガス。
- 121 名前:デフォルトの名無しさん [2016/08/03(水) 15:58:47.02 ID:m0rhFcyF.net]
- 試しに超簡単な例でやってみたら問題なく動いた
ただ、四層構造で今DBにデータ格納してるのだけどそれが原因なのかなって思ってきた… using( var db = new DbCntext ) { } 別のとこに存在する上記のコードで変更すると、関連するデータがすべて変わる雰囲気がある
- 122 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:24:27.25 ID:pX27JEVl.net]
- >>111
ちらっと見てみたけど、tmpImage取ってきてすぐAttachしてるのって何か意味あるのかな? (俺が無知なだけならスマンの) Images tmpImage = ( from d in db.ImagesInfo where d.Id == image.Id select d ).First(); db.ImagesInfo.Attach( tmpImage );
- 123 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:42:27.07 ID:m0rhFcyF.net]
- >>119
そこ考えているとこでどういう意味があるのだろうかは効果があってから考えようとしていた アタッチは接続的な意味があると思ってて取ってきたものに接続することで変更を許さなくするものだと勝手に思い込んでる 参考はこれ mslaboratory.blog.eonet.jp/default/2012/05/entity-framewor-2c13.html
- 124 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:43:39.18 ID:m0rhFcyF.net]
- 本当はimageを入れれば良いんじゃないかと思ってるのだけど入れると
>>98のエラーが出てくる どの値が被っているのかが全然わからない…
- 125 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:46:50.62 ID:bderv+bK.net]
- INNER JOINで条件ゆるくて同じPKが複数出てきてるんだろうけど
EFの方をよくわからんからなあ、ちょっと勉強しないとな・・・
- 126 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:56:52.39 ID:m0rhFcyF.net]
- >>122
もしかしてなんだけど 写真リストが持つ友人リスト 友人リストが持つ写真リスト 写真リストが持つ友人リスト…ってループするから 1つ目の友人リストと、2つ目の友人リストが被って〜…とかありえるのかな 今回のやつで中間テーブルを使用せずに>>110が言うようにするならどうすれば良いんだろう 写真リストは写真情報 友人リストは写真情報 同じ写真情報テーブルを持てば良いのかな それとも四つのクラスだろうか>>106のような
- 127 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:58:53.32 ID:E+3fwoaI.net]
- >>121
Attachが必要なのって、今のcontext以外で作ったインスタンスと、今のcontextに紐付ける場合。 なので、今のcontextから取り出したインスタンスをそのままAttachしても意味無いと思う。
- 128 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:01:47.79 ID:m0rhFcyF.net]
- >>124
別のusing(var db = new .....)の中でのインスタンスと紐付ける場合に必要って認識で良いのかな
- 129 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:22:57.85 ID:fyF/wT3P.net]
- >>123
自分は >>104 に賛成 写真-友人のリンクを保存するテーブルが一つ追加されればいいはず そして、写真、友人それぞれのエンティティに相手のListはいらない リンクを表すエンティティを作って、お互いの関係についてはすべてそこで処理
- 130 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:27:13.60 ID:m0rhFcyF.net]
- >>126
それで今考え直してるところ。その三つ目のテーブルでおそらく 撮影情報テーブル 写真番号 被写体 1 X 1 Y 1 Z 2 X 3 Y 3 Z こんなテーブル作るって意味よね。 この場合このテーブルには写真と友人のリストを持たせる そして写真と友人の相互のリストを消し去る ってのは問題なくできそうなんだけど関係性を繋げるキーってなにか設定いるかな 写真番号と被写体はそれぞれのテーブルの外部キーになるとは思うのだけども
- 131 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:36:00.46 ID:fyF/wT3P.net]
- こうじゃない?
PcitureクラスとFriendクラスを結びつけるとして、 class Relation { public int PictureID { get; set; } public int FriendID { get; set; } } class PictureFriendContext : DbContext { public DbSet<Picture> Pictures { get; set; } public DbSet<Friend> Friends { get; set; } public DbSet<Relation> Relations { get; set; } }
- 132 名前:デフォルトの名無しさん [2016/08/03(水) 17:41:19.97 ID:m0rhFcyF.net]
- >>128
おおわざわざありがとう ideone.com/DiTuFt 一応俺も書いてみたけど少し違うね…ここはリストで持つ必要や、写真・友人との関連性は必要ないのかな リストだとまた変な感じになるのか… そのPictureIdとかは重複を許すってので合ってるよね
- 133 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 18:48:41.57 ID:atH4tWg3.net]
- 猫が写ってる!
- 134 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 18:56:54.40 ID:pX27JEVl.net]
- >>125
>>120 のサンプルも、usingの範囲外で作ったインスタンスAttachしてる。
- 135 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 19:53:26.70 ID:fyF/wT3P.net]
- >>129
Relation クラスにIDを持たせるの忘れてた…ごめんなさい PictureID、FriendIDはもちろん重複可 サンプルができたので貼っときます ideone.com/5XmKW7 (PictureFriendSampleをnewしたらテスト実行)
- 136 名前:132 mailto:sage [2016/08/03(水) 20:12:26.73 ID:fyF/wT3P.net]
- ごめん!!!
最後のクエリが間違ってたのと写真と友人の関連づけ確率が高すぎたのを修正… ideone.com/P50YaZ
- 137 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:43:54.41 ID:m0rhFcyF.net]
- >>133
おお 長々とありがとう こちらもなんか変な問題にぶちあたってたとこで困ったらここに来るようになった 一番始めにデータには紐付けてはしてないのね あとで紐付ける感じなのですな まだ全然わからないコードが多いからまずはべんきょうしてくるわ!!!!!
- 138 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:56:47.90 ID:PIsq5bYs.net]
- asp.net coreの質問てあり?
- 139 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 23:02:35.24 ID:oiDTcOGH.net]
- >>135
こっちじゃダメなの? 【質問】ASP.NETスレ Part7【雑談】 tamae.2ch.net/test/read.cgi/php/1343282128/
- 140 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 23:33:30.41 ID:wKahhl4a.net]
- リレーション用のテーブルもエンティティとして自分で管理するのも方法ではあるだろうけど
それでは何のためにエンティティでリレーションたどったり自動で中間テーブル作る機能があるのかと エンティティ2個でやる例 ideone.com/JlsB9b とりあえずAttachとか忘れて全部コンテキスト配下でやれ
- 141 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 23:58:03.96 ID:v7zxzFcD.net]
- >>135
実はこんなスレも…… .Net Core / Net ASP Core echo.2ch.net/test/read.cgi/tech/14672
- 142 名前:25941/ []
- [ここ壊れてます]
- 143 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 01:26:47.69 ID:KJGV+bda.net]
- >>137
四層構造って言ってるしそれはそれで無理なんじゃね? 四層だから必要なときにdbアクセスでアタッチとか必要になってる気がした 当人と違うしコード読んでないからわかんねぇけどさ
- 144 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 04:32:59.95 ID:oWVthcOw.net]
- 4層構造とかちょっと理解できん
実テーブル4個ってなら、エンティティの定義と生成されたテーブル定義出してくれって感じ なんか隠れた条件や要件でもあるならしらんが 写真と友人以外にエンティティとして「必要」なものなんてないだろ
- 145 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 08:11:20.34 ID:YuweHQdn.net]
- 家族(猫)と同僚が追加されました! New!
- 146 名前:デフォルトの名無しさん [2016/08/04(木) 08:23:38.45 ID:vS9OUDxy.net]
- 相談室もウンコみたいな話題で盛り上がっててなんだかな
- 147 名前:デフォルトの名無しさん [2016/08/04(木) 08:43:43.95 ID:0pX6MUjd.net]
- 昨日の晩から向こうも初心者スレになったので、ヨロシク
- 148 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 13:41:29.45 ID:eUvKuwTN.net]
- C#で void* から byte[] に変換(キャスト)するにはどう書けばよいですか?
- 149 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 14:30:22.24 ID:Iq5WAESB.net]
- キャストは無理
コピーならvoid*をIntPtrにキャストしてMarshal.Copyで
- 150 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:03:25.68 ID:ZLPe6sdc.net]
- windowsフォームでメインフォームのlistboxに
サブフォームで入力した内容(氏名、生年月日、住所)を 登録したいのですがどう書けばよいですか?
- 151 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:09:33.57 ID:dpx64fng.net]
- >>146
メインフォームにlistboxに書き込むメソッドをinternalかpublicで作ってサブフォームから呼び出すか listboxをinternalかpublicにしてサブフォームから書き込むメソッドを作る
- 152 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 09:40:07.46 ID:u3WIRdgf.net]
- ずっとwinformばっかやってきたけど、作ったwinformをwpfに変えるのって大変?
- 153 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 09:44:24.42 ID:YTOm0VxE.net]
- ベタ移植なら字句翻訳レベルだけどそれだとあまりWPFの意味はない
WPFらしく作るならビュー周りは全部作り直し っていうか乗り換えるならオワコンWPFなんかより思い切ってWeb行け
- 154 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 10:04:36.90 ID:u3WIRdgf.net]
- wpfってオワコンなの?
web行けの意味がわからないんだけど… windowsアプリもwebアプリも両方作ってるけど、やっぱ別だよ?
- 155 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 10:11:21.22 ID:HSLNFCI0.net]
- >>146
サブフォームに public Action<int,string> Entry; みたいなものを作って、サブフォーム作成時にコールバックを用意するのが筋かな
- 156 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 10:13:13.02 ID:Lilhp+0b.net]
- C#でタブレットPC向け(Win8以降)のアプリを作成するとしたら、WPFは必須?
標準の機能にはマルチタッチ用の機能が無いので、扱うとしたらWPFはいるのかな?
- 157 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 10:17:06.58 ID:5YPK7Aag.net]
- C#でホームページを作りたい場合コードはhtmlとc#が半々を占めるの?
それともC#がhtmlの代わりになるから8割程度C#とか?
- 158 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 11:25:20.20 ID:ybsuHohg.net]
- >>153
最終的には100%HTML+CSS+JS C#はHTML等を生成するだけ
- 159 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 16:28:54.03 ID:Vnpr4HzA.net]
- C#からC++で書かれたDLLへのアクセスについて質問です。以下のようなコードなのですが、C#からアクセスした場合、hoge.hoge2 がセットされません。どこが悪いのでしょうか?
[C++側(DLL)] typedef struct { wchar_t hoge1[256]; wchar_t hoge2[256]; } HOGE; bool __stdcall func(HOGE* hoge) { wcscpy_s(hoge->hoge1, 256, L"HOGE1"); wcscpy_s(hoge->hoge2, 256, L"HOGE2"); return true; } [C#側] [StructLayout(LayoutKind.Sequential)] public struct HOGE { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public Char[] hoge1; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public Char[] hoge2; } [DllImport("hoge.dll", EntryPoint = "func")] public static extern bool func(int index, ref HOGE hoge); hoge = new HOGE(); hoge.hoge1 = new Char[256]; hoge.hoge2 = new Char[256]; bool res = func(0, ref hoge); hoge.hoge1 は "HOGE1"がセットされている。hoge.hoge2 は なにもセットされていない???
- 160 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 16:59:06.04 ID:qtF7W1LG.net]
- C++の定義とC#の定義とで仮引数が違うみたいだけど?
あとあんまり関係ないと思うけど返値がC++のboolならこっちbyteで宣言した方がいい
- 161 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 17:04:53.51 ID:Vnpr4HzA.net]
- [C#側]
public static extern bool func(ref HOGE hoge); でした。
- 162 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 17:57:02.20 ID:YTOm0VxE.net]
- マーシャリング通さずにfixed char hoge1[256];の方が確実じゃね
- 163 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 19:00:49.52 ID:rSxfnuGG.net]
- StructLayoutにCharSet=CharSet.Unicodeつけてみるとか
- 164 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 22:42:12.33 ID:1u9wjoQf.net]
- C#のvirtualを関数に使うのはなんとなくわかるんだけど
変数にvirtual使うとどうなんの?これも上書きみたいなことするの?
- 165 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 22:47:59.88 ID:AgavxPh8.net]
- >>160
変数にvirtual付けるとコンパイルエラーになります
- 166 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 22:48:47.99 ID:1dJ45Htu.net]
- >160
関数=(インスタンス)メソッドのこと? virtualに指定出来るのは、メソッドとプロパティだけだよ。 これでピンと来ない場合は想定しているコードを書いてくれれば答えやすいです。
- 167 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 00:03:38.81 ID:FDM+aBaV.net]
- >>162
>>161 ああわかった プロパティだからvirtualつけることができてたのね サンクス納得した
- 168 名前:sage [2016/08/06(土) 10:46:11.32 ID:/IrCQqX+.net]
- 任意の文字列から 「-」、「.」と数値(0〜9)だけを残し余分な文字を取り除きたいのですが
スマートな実装方法はありますか?
- 169 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 10:52:45.27 ID:RrWaYmp5.net]
- >>164
スマートな方法というか正規表現使うか 該当するか1文字ずつチェック(文字のままでもバイト配列に変えても)するしかないような気がする
- 170 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:11:59.63 ID:Aiu/11jE.net]
- >>164
string chars = "-.0123456789"; string result = new string(str.Where(chars.Contains).ToArray());
- 171 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:13:17.24 ID:yXATHeUJ.net]
- Console.WriteLine(Regex.Replace("0aiueo123hoge456", "[^0-9]", ""));
- 172 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:14:23.23 ID:yXATHeUJ.net]
- 「-」もあったんだな。
Console.WriteLine(Regex.Replace("0aiueo-123hoge456", "[^0-9\\-]", ""));
- 173 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:15:42.95 ID:yXATHeUJ.net]
- うがー。「.」もあったんだな。。。「\\.」を追加してくれ。連投すまん。
- 174 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:25:23.44 ID:dbq4lnef.net]
- >>164
var filter = new char[] { '-', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; var target = source.Where(filter.Contains).Aggregate("", (x, y) => x + y);
- 175 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:26:25.15 ID:WvVJrckt.net]
- >>169
あるある、どんまい
- 176 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:28:41.55 ID:AMCUmI5q.net]
- 無意味でもLinq使えばスマートに見えるぞ!
あと、拡張メソッドでもいい
- 177 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:37:48.57 ID:yXATHeUJ.net]
- >>166
>>170 色々あって面白いなw
- 178 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:42:05.52 ID:dqPdKOk8.net]
- >>170
これはないわ 非効率すぎるから結合はフィルタかけた後にJoin使え
- 179 名前:174 mailto:sage [2016/08/06(土) 11:43:35.91 ID:dqPdKOk8.net]
- 訂正
この場合はJoinじゃなくてStringのコンストラクタだな
- 180 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:53:33.90 ID:4WcaCha9.net]
- 糞遅いコードばかり貼りやがって。
- 181 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 11:58:21.50 ID:GxNcCQSR.net]
- >>176
Linqは遅い→百万回のループで数十msの差でした はもう飽きた
- 182 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:13:45.80 ID:dbq4lnef.net]
- >>174
https://ideone.com/Ib42NI 手元の結果は TestMethod1→181ミリ秒 TestMethod2→104ミリ秒 TestMethod3→258ミリ秒 であった たまたま気まぐれで書いた俺WIN!!何に勝利したのか分からんけど ぶっちゃけどれでもいいんじゃないか
- 183 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:18:42.25 ID:JXt5PACI.net]
- 10万回の試行でその程度の差なら殆ど誤差みたいなものだな
- 184 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:21:41.85 ID:dqPdKOk8.net]
- >>178
もっと長い文字列でやってみ よくあるLINQ遅いみたいな話じゃなくて、悪名高いループで文字列+=と同じ問題
- 185 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:23:06.08 ID:0Ti/jpH+.net]
- >>178
正規表現のやつだけ、他と文字列違ってない?
- 186 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:37:13.85 ID:4WcaCha9.net]
- 致命的。wpfが糞遅い理由が分かってねーな。
- 187 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:44:42.46 ID:JXt5PACI.net]
- 見当違いなことつぶやき、代案出さずに文句だけは立派な人が来た
- 188 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:53:33.75 ID:dhAdgMp9.net]
- IndexOfAnyでも使って泥臭く書くのが結局一番早そう
- 189 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 12:54:17.70 ID:4WcaCha9.net]
- wpfのソース見てないんだね。おまえらみたいなコードばっかだよ。
- 190 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 14:11:44.98 ID:/GaBlc8t.net]
- 優秀ってことか
- 191 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 14:17:42.26 ID:yXATHeUJ.net]
- 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
- 192 名前:デフォルトの名無しさん [2016/08/06(土) 14:31:33.02 ID:gSAtyijb.net]
- 馬鹿な悩み抱えてる暇があったら
お前の生活を10分でも効率化する方法でも考えてろクソカスども
- 193 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:01:25.95 ID:5meXUbqk.net]
- >>166
>>170 ありがとうございます!
- 194 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:07:06.35 ID:WZNCfna7.net]
- DataTableのSelectメソッドについて質問です
このサイト 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])); }
- 195 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:27:48.83 ID:JXt5PACI.net]
- 日付 <= #開始日# AND #終了日# <= 日付
でもダメ?
- 196 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:28:36.09 ID:yXATHeUJ.net]
- dataRows =dataset.Tables["Table1"].Select("日付 =< #2016/08/01# and 日付 < #2016/09/01#");
じゃないか。違ったらすまん。
- 197 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:30:19.63 ID:yXATHeUJ.net]
- =< ×
↓ <= だな。。。
- 198 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:41:53.94 ID:JXt5PACI.net]
- 逆だったわ済まん
#開始日# <= 日付 AND 日付 <= #終了日#
- 199 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:42:39.24 ID:7SYpUscy.net]
- >>191-193
そのコード書いてみましたが フィルター式 日付 =< #2016/08/01# and 日付 < #2016/09/01#はBoolean型に対して評価しません になってエラー吐きました
- 200 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 15:48:37.78 ID:7SYpUscy.net]
- >>194のコードでできました
サイトを見たらフィルターの式は (列名 条件)の書き方じゃないとダメだと思ってましたが if文とかみたいな条件の書き方でもできるんですね! 回答してくださった方ありがとうございました
|

|