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
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>()
0488デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/16(木) 23:44:12.00ID:o+kP3k0v0
今試したらエラー吐いたけど参考にしてくれ
0490デフォルトの名無しさん (ワッチョイ 9102-hYVS)
垢版 |
2017/11/17(金) 00:03:01.06ID:LOAPaCxV0
ListTest.GroupBy(item => item.名前).Select(group => group.Aggregate((max, item) => item.時間 > max.時間 ? item : max)).ToList()
0491デフォルトの名無しさん (ワッチョイ 91e5-x/r4)
垢版 |
2017/11/17(金) 00:16:27.21ID:ZIvR54fI0
DateTimeオブジェクトはそれ自体に大小関係演算子使えるしな
0495デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 00:57:10.96ID:ZBvifIa80
下のやつを最新にしたいなら>=にすればいいのかな
順番通りの保障ないかもしれないけど
0496デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 01:02:10.05ID:ZBvifIa80
ienumerbleだからだめか
最初の段階でインデックスとペアにするとか
0499デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 02:55:06.18ID:ZBvifIa80
これだけで各々の最新のデータが取れるはず。
ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList()

・GroupBy
Elements in a grouping are yielded in the order that the elements that produced them appear in source.
https://msdn.microsoft.com/ja-jp/library/bb534304(v=vs.110).aspx

・OrderBy
キーに従って昇順のシーケンスの要素を並べ替えます。
このメソッドは、安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合は、要素の順序が保持されます。
https://msdn.microsoft.com/ja-jp/library/bb534966(v=vs.110).aspx


元データの並び順で下にあるほうのが優先されてるのをはっきりとわかるように書きたかったらかなり長いけどこうかな?w
ListTest.Select((item, index) => { Item = item, Index = index } ).GroupBy(pair => pair.Item.名前).Select(group => group.GroupBy(pair => pair.Item.時間).OrderBy(innerGroup => innerGroup.Key).Last().OrderBy(pair => pair.Index).Last().Item)
0500デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 02:56:22.67ID:ZBvifIa80
.ToList()

0502デフォルトの名無しさん (ワッチョイ 914b-jqfw)
垢版 |
2017/11/17(金) 10:01:35.59ID:yfGcWiWk0
落ち着けよ、おっさん。
0503デフォルトの名無しさん (ガックシ 0666-jqfw)
垢版 |
2017/11/17(金) 11:41:22.51ID:vZ4OY4a56
LINQ使わなかったらこうか?

int indexOfSame名前(Test item, List<Test> list)
{
for(var i=0;list.Count;i++)
if(list[i].名前==item.名前){
foundIndex=i;
return i;
}
}
return -1;
}

List<Test> extractLatestData(List<Test> list)
{
var result=new List<Test>();
foreach(var item in list){
var foundIndex=indexOfSame名前(item, result);
if(foundIndex>=0){
if(item.時間>=result[foundIndex].時間){
result[foundIndex]=item;
}
}else{
result.Add(item);
}
}
return result;
}

var result= extractLatestData(ListTest);


LINQ使えばこう?
var result=ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList();
0507デフォルトの名無しさん (ガックシ 0666-jqfw)
垢版 |
2017/11/17(金) 12:11:30.21ID:vZ4OY4a56
foreach~~
result.Add(latestDataOf(リスト, 名前))
とかのほうがいい?
0508デフォルトの名無しさん (ガックシ 0666-jqfw)
垢版 |
2017/11/17(金) 12:14:53.31ID:vZ4OY4a56
これだとおかしいか
foreachであらかじめリストから抽出しておいた名前の種類の一覧とかを与えないとあれか
0512デフォルトの名無しさん (ガックシ 0666-jqfw)
垢版 |
2017/11/17(金) 14:48:58.50ID:y/lDgZqq6
みんなって推敲してるの?
真面目だな
俺もこれからはそうするかもしれん
0513デフォルトの名無しさん (ワッチョイ 5e9c-TFbh)
垢版 |
2017/11/17(金) 15:16:56.52ID:Km51pzYd0
真面目に考えるとデータベースに更新分Insertしてからあらかじめ作ってあるビューをSelectするだけ
GroupBYや集計はDBでやった方が楽だしこっちでは表示件数や順序くらいしかいじらない
データベースといってもローカル鯖や組み込みもある、適材適所
0516デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 18:29:28.97ID:ZBvifIa80
汎用性低いな。
0517デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 18:32:42.23ID:ZBvifIa80
ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList()

ワシのが1番じゃろ。
0520デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 18:50:30.24ID:ZBvifIa80
そういやラムダ式の中の命名は超シンプルでいいんだったな。
>>518 最大値を探すためにループ、その値を持ち主をまた探すためにループってなんかキモくね?それが王道なのか。
0521デフォルトの名無しさん (スプッッ Sd82-aK5r)
垢版 |
2017/11/17(金) 19:36:01.87ID:15/bjs8Fd
>>482
まず時間と名前でグループ化
時間, 名前, テスト回数
2017/1/1, A氏, 3,4
2017/1/1, B氏, 1,2
2017/2/1, A氏, 1,2
2017/2/1, B氏, 1,2
2017/3/1, A氏, 1,2,3

あとは日付けでソートして名前でDistinctするかな
0522デフォルトの名無しさん (ワントンキン MM52-TGzz)
垢版 |
2017/11/17(金) 19:40:08.46ID:hFmoO+PyM
>>520
ループ?
SelectManyはSQLで言えば結合みたいなもの
LinqのJoinだとこんな感じかな

src.GroupBy(s => s.名前)
.Join(src,
g => new { 名前 = g.Key, 時間 = g.Max(t => t.時間) },
u => new { u.名前, u.時間 },
(g, u) => u);

SelectManyの方がわかりやすいな
0523デフォルトの名無しさん (ワッチョイ 4175-jqfw)
垢版 |
2017/11/17(金) 19:46:57.67ID:ZBvifIa80
Maxを探すためにループ、その持ち主また探すためにWhereでループ
0527デフォルトの名無しさん (ワッチョイ 6ee8-LGLT)
垢版 |
2017/11/17(金) 21:20:38.75ID:Xkp76caL0
LINQって実は裏側でforeachで回してるってホント?
0529デフォルトの名無しさん (ワッチョイ 6e80-IVKU)
垢版 |
2017/11/17(金) 21:50:29.21ID:/4Y2zvAi0
例えば、100個の中から、1個を探すのは、全(線形)探索 O(n) しかできない

全データにインデックス・ハッシュがついていれば、O(1)だが、
ソートするには、全探索する必要がある

DB みたいに、B-tree でソートされているのなら、O(log n)

「アルゴリズムと計算量」を勉強して
0531デフォルトの名無しさん (ワッチョイ 8de4-zZYI)
垢版 |
2017/11/17(金) 22:28:51.51ID:fmtM/py00
こんなにレスが付いてるとは思わなかった。
無事満足いく結果がとれるようになりました。
試したことないのもあって勉強になりましたありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています

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