34
2011.3.26 CLR/H Lightening Talks Ruby 向向 multiset 向向向向向向 向向向 H.Hiro(Maraigue) Twitter: @h_hiro_ 1

CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

  • 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

Page 1: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

Ruby 向けmultiset ライブラリ

のご紹介

H.Hiro(Maraigue)Twitter: @h_hiro_

1

Page 2: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

Rails入門 dayということで、私の製作した

汎用Rubyライブラリをゆるく紹介

Page: 2

Page 3: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

Rails入門 dayということで、私の製作した

汎用Rubyライブラリをゆるく紹介

Page: 3

Page 4: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

自己紹介

Page: 4

Page 5: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

今回のテーマ

Page: 6

Page 7: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

multiset

Page: 7

Page 8: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

日本語では「多重集合」

Page: 8

Page 9: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

何それ?

Page: 9

Page 10: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

簡単に言えば

Page: 10

Page 11: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

「どんなアイテムが」

「何個含まれてるか」

を表現するものPage: 11

Page 12: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

集計とかに役立つ

Page: 12

Page 13: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

インストール

Page: 13

gem install multiset

Page 14: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

インストール

Page: 14

gem install multiset

(since 2011.3.25)

Page 15: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

でもその程度なら

Page: 17

Page 18: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

そんなことないよ!

Page: 19

Page 20: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

それだけじゃない

Page: 22

Page 23: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

最初からmultiset でやっていれば

Page: 23

Page 24: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

普通の配列と同じようにも扱える( ハッシュで集計してるとそうはいかな

い )Page: 26

Page 27: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

熱い思いはこの辺にしておいて実用的な話を。

Page: 27

Page 28: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

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ライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

おさらい

Page: 31

Page 32: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

multiset:「アイテムとその個数」の組を格納することに特化したデータ構造

multiset ライブラリを使うメリット■直感的に書ける■配列のごとく扱える

Page: 32

Page 33: CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」

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ライブラリのご紹介」

2011.3.26 CLR/H Lightening Talks

ありがとうございました

Page: 34