Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
LINQ雑談
西区プログラム勉強会

李充根
LINQの雑談します
• C#勉強会の時発表したものの使い回しです(笑)

• 最近LINQを使ってみて面白かったので紹介しま
す
• 去年までは全然使ったことなかったのでまだわ
からないことや曖昧なこといっぱいあるので変
なところはお構いなく...
LINQとは?
• LinQ(リンク)は、2011年4月17日にデビューし
た福岡県福岡市を拠点に活動する日本のローカ
ルアイドルグループ。
• 2012年のスローガンは「出ろ! しゃべれ! スベれ!
笑え! 馬鹿になれ! 笑う門には福来たる!...
LINQとは?
• 統合言語クエリ (LINQ, Language INtegrated
Query)とは、.NET Framework 3.5において、様々
な種類のデータ集合に対して標準化された方法
でデータを問い合わせることを可能にする、...
つまり?
• 簡単な書き方でデータの操作ができる
• SQL、XML、リストなどを操作できる
• 普通のメソッド構文(ラムダ式を使用)でもかけ
るけどクエリ構文で書くと簡単!
• 使わなきゃ損損!
• いつまで古い文法で縛られているの?(C#全...
書き方
• メソッド構文

ワンライナー!

▫ var hoge = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

• クエリ構文
▫ var hoge= from num in n...
ちなみに
• JavaでもJava8からラムダ式が採用されて
StreamAPIが実装されているので似たようなこと
できるよ
• でも一度streamに変換しなきゃいけないしナン
カ垢抜けてない……

• 詳しくはきしださんの記事を↓
• ht...
なんで使い始めたか?
• 数万件のCSVデータから数千件の検索用CSVと
マッチするデータを抽出
• それと同時にアンマッチデータも抽出
• 社内で検討→excel?DB(SQL)?スクリプト?
• エクセルは面倒なので論外、DBに一旦入れて処...
よし、プログラムつくろう
• 最初はパッと書いてぱっと修正できるスクリプ
ト言語を検討
▫ そもそも俺あんまりスクリプトかけない
▫ (Pythonかじった程度、PHPは読むだけ、Ruby??)

• Java,C#ならわかる!
▫ そういえば...
使ってみて
• 予想以上に簡単にデータ処理ができる
• 糖衣構文(クエリ構文)になっているから見やすい

• 一方
▫ アンマッチデータの取得どうするんだ?
▫ 最初は抽出データと検索データ照合したけどM*Nの時
間がかかって遅い!
▫ (抽出...
Twitterで嘆いたら
• すぐに面識のない人から返事が!
▫ (LINQ星人ってボットが拾ってくるみたい)
▫ GroupJoinを使えばいいんだよ!

• GroupJoinはJoinしたものをグループでまとめて
くれる
• Defaul...
結果
• 速度が数百倍!
• ほぼストレスなく実行できた
• その他
• 遅延評価(遅延実行?)→キャッシュないので重い
処理は気をつけないと何度も実行される
• 回避するにはToList()でリスト化してしまう
サンプルプログラム紹介
その他
• Xamarin(mono)でももちろん使える
▫ Xamarin for Android使えばAndroid開発でも使える
 前回発表を参考

• 個人で開発する分ならいいけどグループで開発
するにはみんなのスキル向上が必要
▫ ...
ご清聴ありがとうがございました!
Upcoming SlideShare
Loading in …5
×

LINQ雑談

906 views

Published on

Published in: Technology
  • Be the first to comment

LINQ雑談

  1. 1. LINQ雑談 西区プログラム勉強会 李充根
  2. 2. LINQの雑談します • C#勉強会の時発表したものの使い回しです(笑) • 最近LINQを使ってみて面白かったので紹介しま す • 去年までは全然使ったことなかったのでまだわ からないことや曖昧なこといっぱいあるので変 なところはお構いなく突っ込んでね • C#勉強会の時は友人に「LINQよくわからん」と 言われました、わからないことは適宜聞いてく ださい
  3. 3. LINQとは? • LinQ(リンク)は、2011年4月17日にデビューし た福岡県福岡市を拠点に活動する日本のローカ ルアイドルグループ。 • 2012年のスローガンは「出ろ! しゃべれ! スベれ! 笑え! 馬鹿になれ! 笑う門には福来たる! 雑草ア イドルLinQよ行くぞ!」である (出典:wikipedia)
  4. 4. LINQとは? • 統合言語クエリ (LINQ, Language INtegrated Query)とは、.NET Framework 3.5において、様々 な種類のデータ集合に対して標準化された方法 でデータを問い合わせることを可能にする、言 語に統合された機能のことである。開発ツール はVisual Studio 2008から対応している。 (出典:wikipedia)
  5. 5. つまり? • 簡単な書き方でデータの操作ができる • SQL、XML、リストなどを操作できる • 普通のメソッド構文(ラムダ式を使用)でもかけ るけどクエリ構文で書くと簡単! • 使わなきゃ損損! • いつまで古い文法で縛られているの?(C#全般) • • • • delegate event ラムダ式 etc…
  6. 6. 書き方 • メソッド構文 ワンライナー! ▫ var hoge = numbers.Where(num => num % 2 == 0).OrderBy(n => n); • クエリ構文 ▫ var hoge= from num in numbers where num % 2 == 0 orderby num select num; ラムダ式 ラムダ式 可読性! SQL的構文
  7. 7. ちなみに • JavaでもJava8からラムダ式が採用されて StreamAPIが実装されているので似たようなこと できるよ • でも一度streamに変換しなきゃいけないしナン カ垢抜けてない…… • 詳しくはきしださんの記事を↓ • http://d.hatena.ne.jp/nowokay/20130504
  8. 8. なんで使い始めたか? • 数万件のCSVデータから数千件の検索用CSVと マッチするデータを抽出 • それと同時にアンマッチデータも抽出 • 社内で検討→excel?DB(SQL)?スクリプト? • エクセルは面倒なので論外、DBに一旦入れて処 理しても良かったけど客先にDB入れるの大変 • プログラム簡単に組んで処理しよう!
  9. 9. よし、プログラムつくろう • 最初はパッと書いてぱっと修正できるスクリプ ト言語を検討 ▫ そもそも俺あんまりスクリプトかけない ▫ (Pythonかじった程度、PHPは読むだけ、Ruby??) • Java,C#ならわかる! ▫ そういえばデータ操作ならLINQ便利らしい  SQLっぽいことやりつつデータの整形ができる  二つのデータのマッチもJOIN使えばすぐできる! • LINQ使えば楽じゃん!
  10. 10. 使ってみて • 予想以上に簡単にデータ処理ができる • 糖衣構文(クエリ構文)になっているから見やすい • 一方 ▫ アンマッチデータの取得どうするんだ? ▫ 最初は抽出データと検索データ照合したけどM*Nの時 間がかかって遅い! ▫ (抽出がほぼ一瞬なのに対して数分かかる) • vivisukeさんがN^2はダメでlog(N^2)までだよねって 言ってたことが身を持って実感できたよ
  11. 11. Twitterで嘆いたら • すぐに面識のない人から返事が! ▫ (LINQ星人ってボットが拾ってくるみたい) ▫ GroupJoinを使えばいいんだよ! • GroupJoinはJoinしたものをグループでまとめて くれる • DefaultIfEmptyでマッチしなかったデータも使え るのでアンマッチリストも作れる!
  12. 12. 結果 • 速度が数百倍! • ほぼストレスなく実行できた • その他 • 遅延評価(遅延実行?)→キャッシュないので重い 処理は気をつけないと何度も実行される • 回避するにはToList()でリスト化してしまう
  13. 13. サンプルプログラム紹介
  14. 14. その他 • Xamarin(mono)でももちろん使える ▫ Xamarin for Android使えばAndroid開発でも使える  前回発表を参考 • 個人で開発する分ならいいけどグループで開発 するにはみんなのスキル向上が必要 ▫ とは言ってもすでに.net4.5の時代だしそろそろみ んな使えてもいいはず • スクリプト言語で同じような処理したいな ▫ 関数型使えばいいのかい? ▫ Haskell勉強中
  15. 15. ご清聴ありがとうがございました!

×