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