X



ふらっと C#,C♯,C#(初心者用) Part133
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 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
0388デフォルトの名無しさん (ワッチョイ 5f8a-lB0v)
垢版 |
2017/11/15(水) 00:28:57.41ID:nkl9Qzh90
長々と無意味なレスバが続いてたけど、ひとつだけ皆が同意できそうなのは
例外がどういう用途で使われるべきかの一般的なコンセンサスに従う人は
ID:D89+JmTA0 = ID:pJdoypJN0 と一緒に仕事したくない、という点だけだな
0389デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:30:13.38ID:2GqBFPwl0
異常は戻り値で知らせるなって言いたいんじゃないの。
まあそりゃそうだよねって言う。
0391デフォルトの名無しさん (アウアウエー Sa7f-+sn6)
垢版 |
2017/11/15(水) 01:09:16.87ID:udlId46Ca
勘違いする人がいると見てられないので一応書いとくけど、
例外の目的の一つはフェイルセーフ、つまりプログラマの想定外のことが起こった時に
「安全側に倒す」 = 「プログラムを強制終了させる」ことなので、
「プログラマの想定外のことが起こってもプログラムの実行が止まらないようにしたい」
などという馬鹿なことを考えてはいけない。
0401デフォルトの名無しさん (スッップ Sd9f-gk0q)
垢版 |
2017/11/15(水) 10:01:55.68ID:DCxsxqPWd
>>397
やりたいのは文字列じゃないけどこんな感じのイメージ
パフォーマンスはしらない

var list = new List<string>() { "○", "×", "×", "×" , "○", "△", "△", "○", "△" };
Func<string, bool> isFirst = (item) => item == "○";

int groupingId = 0;
var result = list.Select(item =>{
if (isFirst(item)) { groupingId++; }
return new { Id = groupingId, Value = item };
})
.GroupBy(pair => pair.Id, pair => pair.Value);

// { "○", "×", "×", "×"}{"○", "△", "△"}{"○", "△" }
List<List<string>> hoge = result.Select(group => group.ToList()).ToList();
0402デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 11:14:21.87ID:LdCnvqY76
LINQと関数型プログラミングって何が違うの?
0404デフォルトの名無しさん (ワッチョイ 5f19-7wKg)
垢版 |
2017/11/15(水) 11:51:23.71ID:CJEkfJ7L0
>>401
畳み込みですやってみた。

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };

var isFirst = new Func<string, bool>((item) => item == "○");

var result = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item))
prevList.Add(new List<string>() { item });
else
prevList.Last().Add(item);
return prevList;
});

// resultからhogeにクローン
var hoge = (List<List<string>>)result.Select(group => (List<string>)group.Select(item => item));
0405デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:03:19.06ID:RrK4s1ZI6
こっちの方がいいか。

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };

var isFirst = new Func<string, bool>((item) => item == "○");

var hoge = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item)) { prevList.Add(new List<string>() };
prevList.Last().Add(item);
return prevList;
});
0406デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:05:06.75ID:RrK4s1ZI6
if (isFirst(item)) { prevList.Add(new List<string>() };
括弧ミスった
0408デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:07:15.90ID:RrK4s1ZI6
確かにその方がスッキリするな。
いずれにしろsplitの中身を定義しないといけないけど
0410デフォルトの名無しさん (ブーイモ MM0f-hQHN)
垢版 |
2017/11/15(水) 12:35:31.31ID:MLdh1wBXM
Aggregateは宣言的でないので関数型に慣れたらむしろ読み辛く感じるようになる
考え方が実質的に手続き型だから、手続き型に慣れてる人には馴染みやすいので濫用されてしまいやすい
0411デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:43:50.52ID:LdCnvqY76
関数型の典型的な関数みたいにバッ、バッって感じじゃなくてズィーンて感じだからか。
>>401のやり方だと使ってる関数はバッバだけ感じかもしれないけど外部変数使ってるから内外に絡み合ってるのがあれだけどどうすればいいんだろう
0413デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:48:32.27ID:LdCnvqY76
ズィーン→ズインッ→ズィッ→バッ
こう見れば畳み込みも関数型に馴染む
0414デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:49:52.25ID:LdCnvqY76
>>412
まあこの場合ではSQLを扱ってるわけじゃないしな
0416デフォルトの名無しさん (スッップ Sd9f-gk0q)
垢版 |
2017/11/15(水) 13:11:40.68ID:DCxsxqPWd
確かに目新しさにおおーってなったけど、これただのforeachでいいな
やっぱシンプルにループさせるのが最強か

var result = new List<List<string>>();

list.ForEach(item => {
if (isFirst(item) || list.Count <= 0){
result.Add(new List<string>());
}
result.Last().Add(item);
});
0417デフォルトの名無しさん (ブーイモ MM0f-hQHN)
垢版 |
2017/11/15(水) 13:14:41.39ID:MLdh1wBXM
var sep = list.Select((x, i) => new {x, i})
.Where(xi => xi.x == '○')
.Select(xi => new[] {'○'}.Concat(
 list.Skip(xi.i + 1).TakeWhile(x => x != '○')));
こうかな
関数作った方がいいのは同意する
0418デフォルトの名無しさん (アウアウエー Sa7f-+sn6)
垢版 |
2017/11/15(水) 14:15:45.67ID:1p9gbgPTa
上のお題、結果がIEnumerable<IEnumerable<string>>でいいなら、

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };
var index = 0;
var hoge = list.GroupBy(x => x == "○" ? ++index : index);

ではだめ?
0419デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:26:29.53ID:7R79hyBA0
>>416
それ意味的にはaggregateと全く変わらない
初期値が外にあるか引数のところにあるかしか違いない
0420デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:30:36.24ID:7R79hyBA0
>>417
それaggregateより読みやすいと思うか?
0421デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:40:07.85ID:7R79hyBA0
>>418
その型じゃダメでしょ。
0423デフォルトの名無しさん (ワッチョイ 5ff9-7wKg)
垢版 |
2017/11/15(水) 18:04:09.97ID:uxhVFwQf0
>>422
変換しろよ
その分だけコード長くなるぞ
0425デフォルトの名無しさん (ワッチョイ ff9d-ouqv)
垢版 |
2017/11/15(水) 18:38:01.15ID:AeO6Jp1U0
いつも思うんだが、この手のやつをLINQでやりたがるやつって何が目的なんだろ
自分ですらすらと書けるならLINQでいいけど、そうじゃないなら勉強以上の意味があるとは思えん

個人的にはシンプルさを競うなら>>418がいいと思う
戻りの型が気に食わないなら
.Select(t => t.ToList<string>()).ToList<List<string>>();
あたり追加すればいいだろ
0427デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/15(水) 18:46:37.59ID:iCpU6Box0
お前らが思ってる程きれいでもきたなくもないから安心しろ
0429デフォルトの名無しさん (ワッチョイ 5fe6-7wKg)
垢版 |
2017/11/15(水) 18:56:00.52ID:SIgrthm30
>>425
変数や関数を定義するのにいちいち名前をつけるのが面倒だからよく使う
無名だらけ
0430デフォルトの名無しさん (ワッチョイ 5fe6-7wKg)
垢版 |
2017/11/15(水) 18:56:47.00ID:SIgrthm30
関数を定義するときには場所にも悩むしな
0431デフォルトの名無しさん (スッップ Sd9f-gk0q)
垢版 |
2017/11/15(水) 19:00:28.04ID:DCxsxqPWd
>>418
Selectなくても大丈夫だったか
hogeのGetEnumeratorが呼ばれる度にindexが増えていくのが気になるけど

戻り値はIEnumerableでもIGroupingどっちでもいいけどkeyは隠すかも
もし必要になったら以下のメソッドを作って、foreachと速度比較してって採用するかどうかって感じかな
色々と参考になった

public static IEnumerable<IEnumerable<string> Split<T>(IEnumerable<T> source, Func<T, bool> predicate){
var index = 0;
return source.GroupBy(x => predicate(x) ? ++index : index);
}
0432デフォルトの名無しさん (ワッチョイ 5f6e-7wKg)
垢版 |
2017/11/15(水) 19:05:07.59ID:JCFmpBxh0
俺嫌われすぎだろ
アスペルガー症候群だから仕方ないのか
0433デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 19:06:53.89ID:LdCnvqY76
スリップが****-7wKgのは全部ワシじゃ
0437デフォルトの名無しさん (ワッチョイ ffe8-ueqH)
垢版 |
2017/11/15(水) 20:42:42.91ID:4QHQX7jw0
>>434
アカンか?
0439デフォルトの名無しさん (ワッチョイ 5f86-bJtK)
垢版 |
2017/11/15(水) 21:25:59.97ID:md1eodvT0
LINQが良いか悪いかは別にしてLINQを必要以上に毛嫌いする奴って頭悪いだけだろ。
0443デフォルトの名無しさん (ワッチョイ 5f16-bJtK)
垢版 |
2017/11/15(水) 21:36:55.30ID:4L7ZsFBR0
必要以上にってのが言いたかった。
実用性は別としてリスト操作系関数でスラスラ書ける奴にコンプでもあるのかって思っちゃう
0446デフォルトの名無しさん (ワッチョイ 5f16-bJtK)
垢版 |
2017/11/15(水) 21:44:53.19ID:4L7ZsFBR0
しかし自分の苦手な物を使える奴にはコンプを感じる
0449デフォルトの名無しさん (ワッチョイ 5f25-bJtK)
垢版 |
2017/11/15(水) 22:15:03.22ID:mH4zmpJW0
興味ねーならゴミだのクソだのほざいてんじゃねーよw
0451デフォルトの名無しさん (ワッチョイ dfe3-FK5L)
垢版 |
2017/11/15(水) 22:20:30.39ID:EAeU3mIh0
どれだけ偉そうな主張があるのかと思えば
貼ってあるのはクソコードばかり
linq貼ってるやつ目障りだから死ねよ
普通に組んだ方が綺麗なコードなら持ってくんなよ
だっせ
0452デフォルトの名無しさん (ワッチョイ 5ffa-bJtK)
垢版 |
2017/11/15(水) 22:21:20.95ID:txwTk3zR0
おまえの価値基準で判断すんなw
コンプ感じてるだけw
0457デフォルトの名無しさん (ワッチョイ dfe3-FK5L)
垢版 |
2017/11/15(水) 22:35:29.64ID:EAeU3mIh0
どっちかっていうとアプリを作れないアホだな
まあ、コードで何か主張したいならGitHubでもやればいいのに
こんな便所でしか主張できないなら
クズどものlinqライフもここでしめーだろ
0458デフォルトの名無しさん (ワッチョイ 5fe5-7wKg)
垢版 |
2017/11/15(水) 22:39:12.32ID:E1HTns1P0
ウハwwwwww
書けない奴が批判の図wwww
権利すらなしwwwwwww
0460デフォルトの名無しさん (ワッチョイ 5f4b-bJtK)
垢版 |
2017/11/15(水) 23:03:01.93ID:vH3D/QHI0
キミ流のコードおなシャス!
0464デフォルトの名無しさん (ワッチョイ 5f75-7wKg)
垢版 |
2017/11/15(水) 23:26:21.77ID:H4muME/S0
>>428
どこ情報?
0469デフォルトの名無しさん (ワッチョイ 92eb-RjUU)
垢版 |
2017/11/16(木) 18:15:43.67ID:7VJMckpW0
WPFじゃなくてWindowsForms内で簡単な3D描画したいんですが
どういう風がいいでしょうか。
とりあえず箱を線で描くだけなんですが。

・DrawLineみたいなので始点終点を3次元(X,Y,Z)で指定し描画
・視点の位置(X,Y,Z)と向きを指定して表示

って風な感じが希望なんですが・・・・
0475デフォルトの名無しさん (アウアウエー Sa0a-5Bo2)
垢版 |
2017/11/16(木) 19:04:34.95ID:JEjgvNkla
>>471
カメラの視線方向をZ軸、カメラから1000mm先のカメラの視線に垂直な平面上の1000mmの
線分がモニター上に1000mmで表示されるモデルを採用、3D、2Dともに同じ単位系(例えばmm)
を使用する条件なら、3D空間上の点(X, Y, Z)を2D上の点(x, y)に写像するには、

(x, y) = (X/Z, Y/Z)

でいいと思う。知らんけど
2DグラフィックのY軸が下向きなのを考慮するならyはもちろん-1倍する
0478デフォルトの名無しさん (ワッチョイ 2de3-vU7N)
垢版 |
2017/11/16(木) 19:57:23.76ID:K+YFepCs0
そんな面倒なことしなくても
カメラ固定ならXYに足すだけでいいじゃん
Zが1ならXYに0.5ずつ足すみたいのでいいよ
Zが2ならXYに1ずつ足す
Zが3ならXYに1.5ずつ足す
みたいな
0479デフォルトの名無しさん (ワッチョイ 6e9a-GXP8)
垢版 |
2017/11/16(木) 21:38:46.30ID:ac8ZDyBE0
>>469
URLが何故か張れないんだが
C#3D立方体ワイヤーフレーム (第1回) for VS2013 Express
でググって見つかるところが参考になる
ライブラリを期待しているのならC++で探すしかないだろうな
DLLになっていればC#からでも使えるから
0481デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/16(木) 23:02:09.93ID:o+kP3k0v0
>>474でもうでてる
0482デフォルトの名無しさん (ワッチョイ 8de4-zZYI)
垢版 |
2017/11/16(木) 23:17:24.79ID:Tv1Vr9CT0
時間, 名前, テスト回数
2017/1/1, A氏, 3
2017/1/1, A氏, 4
2017/1/1, B氏, 1
2017/1/1, B氏, 2
2017/2/1, A氏, 1
2017/2/1, A氏, 2
2017/2/1, B氏, 1
2017/2/1, B氏, 2
2017/3/1, A氏, 1
2017/3/1, A氏, 2
2017/3/1, A氏, 3

↑のようなデータがある場合 
↓のように名前ごとに最新の時間のデータを取得したい。
2017/3/1, A氏, 1
2017/3/1, A氏, 2
2017/3/1, A氏, 3
2017/2/1, B氏, 1
2017/2/1, B氏, 2
0483デフォルトの名無しさん (ワッチョイ 8de4-zZYI)
垢版 |
2017/11/16(木) 23:18:08.01ID:Tv1Vr9CT0
>>482
↓のような感じで取れるとは思いますが
実際のデータでは時間も名前も複数あるのでLINQで一発で取れる書き方はないでしょうか?
public class Test
{
public DateTime 時間 { get; set; }
public string  名前 { get; set; }
public int テスト回数 { get; set; }
}

List<Test> ListTest = new ListTest ();

var List1 = ListTest.Where(x=>x.名前 == "A氏" & x.時間 = 2017/3/1).ToList();
var List2 = ListTest.Where(x=>x.名前 == "B氏" & x.時間 = 2017/2/1).ToList();

List3.add(List1);
List3.add(List2);
0484デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/16(木) 23:18:26.88ID:o+kP3k0v0
LINQの出番再び
0487デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/16(木) 23:37:44.24ID:o+kP3k0v0
list.GroupBy(item=>item.名前).Select(group=>group.Max(item=>item.日時.Ticks)).ToList<Test>()
■ このスレッドは過去ログ倉庫に格納されています

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