clr/h 第56回勉強会 lt「ruby向けmultisetライブラリのご紹介」
DESCRIPTION
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」資料参考URL: http://maraigue.hhiro.net/multiset/TRANSCRIPT
![Page 1: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/1.jpg)
2011.3.26 CLR/H Lightening Talks
Ruby 向けmultiset ライブラリ
のご紹介
H.Hiro(Maraigue)Twitter: @h_hiro_
1
![Page 2: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/2.jpg)
2011.3.26 CLR/H Lightening Talks
Rails入門 dayということで、私の製作した
汎用Rubyライブラリをゆるく紹介
Page: 2
![Page 3: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/3.jpg)
2011.3.26 CLR/H Lightening Talks
Rails入門 dayということで、私の製作した
汎用Rubyライブラリをゆるく紹介
Page: 3
![Page 4: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/4.jpg)
2011.3.26 CLR/H Lightening Talks
自己紹介
Page: 4
![Page 5: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/5.jpg)
2011.3.26 CLR/H Lightening Talks
H.Hiro( 別名 :Maraigue まれーぐ )
Twitter: @h_hiro_•この近くにある大学の大学院生• Ruby大好き• C#とか C++とかもよく書きます(Windows/WindowsMobile)
Page: 5
![Page 6: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/6.jpg)
2011.3.26 CLR/H Lightening Talks
今回のテーマ
Page: 6
![Page 7: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/7.jpg)
2011.3.26 CLR/H Lightening Talks
multiset
Page: 7
![Page 8: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/8.jpg)
2011.3.26 CLR/H Lightening Talks
日本語では「多重集合」
Page: 8
![Page 9: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/9.jpg)
2011.3.26 CLR/H Lightening Talks
何それ?
Page: 9
![Page 10: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/10.jpg)
2011.3.26 CLR/H Lightening Talks
簡単に言えば
Page: 10
![Page 11: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/11.jpg)
2011.3.26 CLR/H Lightening Talks
「どんなアイテムが」
「何個含まれてるか」
を表現するものPage: 11
![Page 12: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/12.jpg)
2011.3.26 CLR/H Lightening Talks
集計とかに役立つ
Page: 12
![Page 13: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/13.jpg)
2011.3.26 CLR/H Lightening Talks
インストール
Page: 13
gem install multiset
![Page 14: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/14.jpg)
2011.3.26 CLR/H Lightening Talks
インストール
Page: 14
gem install multiset
(since 2011.3.25)
![Page 15: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/15.jpg)
2011.3.26 CLR/H Lightening Talks
利用例require "rubygems"require "multiset"result = Multiset.newFile.foreach("sample.txt") do |line| result << lineendp result
Page: 15
![Page 16: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/16.jpg)
2011.3.26 CLR/H Lightening Talks
結果【入力】AppleOrangeAppleAppleMelonOrange
【出力】#<Multiset:#1 "Melon\n", #3 "Apple\n", #2 "Orange\n">
Page: 16
![Page 17: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/17.jpg)
2011.3.26 CLR/H Lightening Talks
でもその程度なら
Page: 17
![Page 18: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/18.jpg)
2011.3.26 CLR/H Lightening Talks
result = {} # 空のハッシュFile.foreach("sample.txt") do |line| result[line] ||= 0 # 未割当なら初期化 result[line] += 1endp result
でいいと言われるかも
Page: 18
![Page 19: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/19.jpg)
2011.3.26 CLR/H Lightening Talks
そんなことないよ!
Page: 19
![Page 20: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/20.jpg)
2011.3.26 CLR/H Lightening Talks
【 multiset を使った場合】File.foreach("sample.txt") do |line| result << lineend【 multiset を使わない場合】File.foreach("sample.txt") do |line| result[line] ||= 0 # 未割当なら初期化 result[line] += 1end
Page: 20
![Page 21: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/21.jpg)
2011.3.26 CLR/H Lightening Talks
【 multiset を使った場合】File.foreach("sample.txt") do |line| result << lineend【 multiset を使わない場合】File.foreach("sample.txt") do |line| result[line] ||= 0 # 未割当なら初期化 result[line] += 1end
Page: 21
こういう「本筋に関係ない」ロジックは邪魔だと思いませんか!?
![Page 22: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/22.jpg)
2011.3.26 CLR/H Lightening Talks
それだけじゃない
Page: 22
![Page 23: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/23.jpg)
2011.3.26 CLR/H Lightening Talks
最初からmultiset でやっていれば
Page: 23
![Page 24: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/24.jpg)
2011.3.26 CLR/H Lightening Talks
require "rubygems"require "multiset"result = Multiset.newFile.foreach("sample.txt") do |line| result << lineend
Page: 24
![Page 25: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/25.jpg)
2011.3.26 CLR/H Lightening Talks
require "rubygems"require "multiset"result = Multiset.newFile.foreach("sample.txt") do |line| result << lineendresult.each do |item| puts "#{item} is found"end
Page: 25
![Page 26: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/26.jpg)
2011.3.26 CLR/H Lightening Talks
普通の配列と同じようにも扱える( ハッシュで集計してるとそうはいかな
い )Page: 26
![Page 27: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/27.jpg)
2011.3.26 CLR/H Lightening Talks
熱い思いはこの辺にしておいて実用的な話を。
Page: 27
![Page 28: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/28.jpg)
2011.3.26 CLR/H Lightening Talks
(1)multiset の生成方法result = Multiset.newFile.foreach("sample.txt") do |line| result << lineend
はdata = File.readlines("sample.txt")result = Multiset.new(data)
とも書けるPage: 28
![Page 29: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/29.jpg)
2011.3.26 CLR/H Lightening Talks
(2)multimap:1 つのキーに対して複数の値を持てる連想配列mm = Multimap.newmm["Hatsune"] << "Miku"mm["Kagamine"] << "Rin"mm["Kagamine"] << "Len"p mm
Page: 29
![Page 30: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/30.jpg)
2011.3.26 CLR/H Lightening Talks
(2)multimap:1 つのキーに対して複数の値を持てる連想配列mm = Multimap.newmm["Hatsune"] << "Miku"mm["Kagamine"] << "Rin"mm["Kagamine"] << "Len"p mm#<Multimap:"Hatsune"=>{#1 "Miku"},"Kagamine"=>{#1 "Rin", #1 "Len"}>
Page: 30
![Page 31: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/31.jpg)
2011.3.26 CLR/H Lightening Talks
おさらい
Page: 31
![Page 32: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/32.jpg)
2011.3.26 CLR/H Lightening Talks
multiset:「アイテムとその個数」の組を格納することに特化したデータ構造
multiset ライブラリを使うメリット■直感的に書ける■配列のごとく扱える
Page: 32
![Page 33: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/33.jpg)
2011.3.26 CLR/H Lightening Talks
インストール:gem install multiset
使う前のおまじない:require "rubygems"require "multiset"
初期化Multiset.new( 配列 )配列は省略可能 ( 空の Multiset を生成 )
Page: 33
![Page 34: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」](https://reader036.vdocuments.net/reader036/viewer/2022062513/557ad440d8b42a0b188b525e/html5/thumbnails/34.jpg)
2011.3.26 CLR/H Lightening Talks
ありがとうございました
Page: 34