SlideShare ist ein Scribd-Unternehmen logo
1 von 15
LINQ雑談
西区プログラム勉強会

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

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

delegate
event
ラムダ式
etc…
書き方
• メソッド構文

ワンライナー!

▫ 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的構文
ちなみに
• JavaでもJava8からラムダ式が採用されて
StreamAPIが実装されているので似たようなこと
できるよ
• でも一度streamに変換しなきゃいけないしナン
カ垢抜けてない……

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

• Java,C#ならわかる!
▫ そういえばデータ操作ならLINQ便利らしい
 SQLっぽいことやりつつデータの整形ができる
 二つのデータのマッチもJOIN使えばすぐできる!

• LINQ使えば楽じゃん!
使ってみて
• 予想以上に簡単にデータ処理ができる
• 糖衣構文(クエリ構文)になっているから見やすい

• 一方
▫ アンマッチデータの取得どうするんだ?
▫ 最初は抽出データと検索データ照合したけどM*Nの時
間がかかって遅い!
▫ (抽出がほぼ一瞬なのに対して数分かかる)

• vivisukeさんがN^2はダメでlog(N^2)までだよねって
言ってたことが身を持って実感できたよ
Twitterで嘆いたら
• すぐに面識のない人から返事が!
▫ (LINQ星人ってボットが拾ってくるみたい)
▫ GroupJoinを使えばいいんだよ!

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

• 個人で開発する分ならいいけどグループで開発
するにはみんなのスキル向上が必要
▫ とは言ってもすでに.net4.5の時代だしそろそろみ
んな使えてもいいはず

• スクリプト言語で同じような処理したいな
▫ 関数型使えばいいのかい?
▫ Haskell勉強中
ご清聴ありがとうがございました!

Weitere ähnliche Inhalte

Mehr von Lee Choong Geun

PBLのためのはじめてのGit
PBLのためのはじめてのGitPBLのためのはじめてのGit
PBLのためのはじめてのGitLee Choong Geun
 
Effective Java輪読会 vol0
Effective Java輪読会 vol0Effective Java輪読会 vol0
Effective Java輪読会 vol0Lee Choong Geun
 
出、出~!勉強会参加技術向上思奴wwww
出、出~!勉強会参加技術向上思奴wwww出、出~!勉強会参加技術向上思奴wwww
出、出~!勉強会参加技術向上思奴wwwwLee Choong Geun
 
xamarin for android試してみた
xamarin for android試してみたxamarin for android試してみた
xamarin for android試してみたLee Choong Geun
 
西区プログラム勉強会説明資料OSC発表版
西区プログラム勉強会説明資料OSC発表版西区プログラム勉強会説明資料OSC発表版
西区プログラム勉強会説明資料OSC発表版Lee Choong Geun
 
ハードウェアで遊ぼうよ
ハードウェアで遊ぼうよハードウェアで遊ぼうよ
ハードウェアで遊ぼうよLee Choong Geun
 
西区プログラム勉強会(仮)Ver2
西区プログラム勉強会(仮)Ver2西区プログラム勉強会(仮)Ver2
西区プログラム勉強会(仮)Ver2Lee Choong Geun
 

Mehr von Lee Choong Geun (7)

PBLのためのはじめてのGit
PBLのためのはじめてのGitPBLのためのはじめてのGit
PBLのためのはじめてのGit
 
Effective Java輪読会 vol0
Effective Java輪読会 vol0Effective Java輪読会 vol0
Effective Java輪読会 vol0
 
出、出~!勉強会参加技術向上思奴wwww
出、出~!勉強会参加技術向上思奴wwww出、出~!勉強会参加技術向上思奴wwww
出、出~!勉強会参加技術向上思奴wwww
 
xamarin for android試してみた
xamarin for android試してみたxamarin for android試してみた
xamarin for android試してみた
 
西区プログラム勉強会説明資料OSC発表版
西区プログラム勉強会説明資料OSC発表版西区プログラム勉強会説明資料OSC発表版
西区プログラム勉強会説明資料OSC発表版
 
ハードウェアで遊ぼうよ
ハードウェアで遊ぼうよハードウェアで遊ぼうよ
ハードウェアで遊ぼうよ
 
西区プログラム勉強会(仮)Ver2
西区プログラム勉強会(仮)Ver2西区プログラム勉強会(仮)Ver2
西区プログラム勉強会(仮)Ver2
 

Kürzlich hochgeladen

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Kürzlich hochgeladen (10)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

LINQ雑談