【VB.NET】LINQ友の会【C#, C♯, C#】
レス数が1000を超えています。これ以上書き込みはできません。
VisualStudio2008より追加された便利で強力な機能
統合言語クエリ (LINQ : Language Integrated Query)
ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。
>>949
プランナの有無とか、あくまでも今のLINQの実装なら、て前提があると思うが
基本的にはLINQは遅延実行なので、プランナ入れて最適化する余地はあると思うぞ
DBアクセスに限るなら、LINQがやるのは最終的なSQLを作るだけとも言えるので
後はそのDBのオプティマイザ次第、ってのが理想じゃないかとは思うが
まあSQLの書き方でパフォーマンス差が出るのは事実だし
LINQで最適化されてないSQLが出力されるのもある程度しょうがない LINQはコレクションを順番に処理するだけのことだからXMLのような文書を検索なんて
実質できないでしょ。誇大広告じゃないかな。
コレクションにすればLINQがつかえるけど、IEnumerableにできなければ使えない。
そこがむつかしいのでは? つーかやってみると奥が深いな。あんまり深入りしないほうがいいな。
select,whereを適当につかうくらいにしておいたほうがいいとおもった var query = from f in FileList
let matches = rx.Matches(f.DirectoryName )
where (matches.Count > 0)
orderby f.CreationTime descending
group f by f.DirectoryName;
これをdesendigとaescendigを切り替えようとおもうと、まるまる2回書かないと
いけないな。
なんかいい方法ないのか?
モードでクエリを切り替えるのって大変だな。 >>954
Linqで全てのクエリを賄うのは厳しいよ
パフォーマンスもそうだけど検索対象に特化したDSLの方がやっぱり機能面でも強力だ
ただしそういう場合でも結果をIEnumerableに帰着させるだけでLinqの恩恵を得られるってのは大きいね
そうすれば省メモリかつ高速かつ柔軟に検索した上で後は同じインターフェースを通じて結果をお手軽に処理といった事ができる せっかくLINQ覚えてもJAVAではつかえないのか? 残念。 Java8の関数型、Stream がLINQと同じ Javaにもあったのか? 本が古すぎた。
ところでクエリー式とメソッド式はどっちが有利なのだ? どっちかにして
ほしいよ。それでなくても覚えることが多いのだから、、 散々既出だけどメソッド形式だけでいいよ
クエリ形式はレガシーコードの保守で修正しなきゃならない場合にだけ考えればいい 既出でしたか? 最近LINQを知ったばかりなので、知りませんでした。 var q = from cn in (from n in a select conversion(n))
from m in b select cn + m;
var q = a.Select((n) => new { n, cn = conversion(n) })
.SelectMany((c)=>b, (d,m)=>d.cn + m);
等価らしいが意味が分からない。dはどこからでてきたのだろうか? いやいや違うだろ
http://devlights.hatenablog.com/entry/20100715/p1
この例のようにSelectManyの、ここでは2番目のオーバーロードを使っている
つまり
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Console.WriteLine(conversion(a[i]) + b[j]);
Console.WriteLine($"conversion called: {count}");
と同じことをSelectManyを使って一本化してるだけ
1番目のオーバーロードが同じclassのメンバなのでcollectionselectorを使ってないが
ここではa[]とb[]という別々の配列に対して計算結果の二重ループを平坦化したいので
collectionselectorが必要になりこのような書き方になっている >>968
遅くねーよ
.NET 4.7 64bit使ってるよな?CPUは何だよ? ちゃんとベタに書いたコードに比べたら無駄なコードが入るので速くはならいよ。
比べたらそりゃ遅いに決まってる。 副作用を検知して、自動で並列化するようになれば、
linqで書いといた方が速いってことにもなりそうだけど 他でドヤ顔してLINQ書いてる馬鹿がいて、
for + if でそのまま仕様どおり書いたら何倍も速かったってオチがあったな。 違いが分かるほど差が出るってどんな用途だよ??
そんなに速度欲しいならC++で書いたほうがいいんじゃないの C#は糞遅いからな。
C#でもJavaでもPythonでもライブラリはみんなC++で書かれてるのは他が糞遅いから。 LINQが遅いのは分るがC#自体はそれほど遅くはない。 C#自体の遅い速いじゃなくて
LinQと普通のベタコードの違いが分かるくらい速度を求める処理するなら
最初から素直にC++使えって事だろ LINQ使うから遅くなるだけで普通に書けばまぁまぁ速度は出る。ガチのC++には勝てないがね。 C#より(開発環境インストールするのにかかる時間が)速い言語をあげてください >>975
LINQの句理解せずに適当に使って無駄なループしてたってオチじゃね LINQは川俣本でいいから読んどくべきだな
実行時間を削る事にかけてはストイックなほどの本 このスレといい関数言語スレの過疎っぷりといい、
C#スレで暴れてたキチガイって結局一人だけだったんだな。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 3556日 18時間 50分 34秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。