CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,347 views

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

CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」資料
参考URL: http://maraigue.hhiro.net/multiset/

Statistics

Views

Total Views
1,347
Views on SlideShare
1,347
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Ruby 向け multiset ライブラリの ご紹介 H.Hiro(Maraigue) Twitter: @h_hiro_
    • Rails 入門 day と
    • いうことで、
    • 私の製作した
    • 汎用 Ruby ライブラリを
    • ゆるく紹介
    Page:
    • Rails 入門 day と
    • いうことで、
    • 私の製作した
    • 汎用 Ruby ライブラリを
    • ゆるく紹介
    Page:
    • 自己紹介
    Page:
    • H.Hiro
    • ( 別名 :Maraigue まれーぐ )
    • Twitter: @h_hiro_
    • この近くにある大学の大学院生
    • Ruby 大好き
    • C# とか C++ とかもよく書きます (Windows/WindowsMobile)
    Page:
    • 今回のテーマ
    Page:
    • multiset
    Page:
    • 日本語では
    • 「多重集合」
    Page:
    • 何それ?
    Page:
    • 簡単に言えば
    Page:
    • 「どんなアイテムが」
    • 「何個含まれてるか」
    • を表現するもの
    Page:
    • 集計とかに
    • 役立つ
    Page:
    • インストール
    Page: gem install multiset
    • インストール
    Page: gem install multiset (since 2011.3.25)
    • 利用例
    • require "rubygems"
    • require "multiset"
    • result = Multiset.new
    • File.foreach("sample.txt") do |line|
    • result << line
    • end
    • p result
    Page:
    • 結果
    • 【入力】
    • Apple
    • Orange
    • Apple
    • Apple
    • Melon
    • Orange
    • 【出力】
    • #<Multiset:#1 &quot;Melonn&quot;, #3 &quot;Applen&quot;, #2 &quot;Orangen&quot;>
    Page:
    • でも
    • その程度なら
    Page:
    • result = {} # 空のハッシュ
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result[line] ||= 0 # 未割当なら初期化
    • result[line] += 1
    • end
    • p result
    • でいいと言われるかも
    Page:
    • そんなこと
    • ないよ!
    Page:
    • 【 multiset を使った場合】
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result << line
    • end
    • 【 multiset を使わない場合】
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result[line] ||= 0 # 未割当なら初期化
    • result[line] += 1
    • end
    Page:
    • 【 multiset を使った場合】
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result << line
    • end
    • 【 multiset を使わない場合】
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result[line] ||= 0 # 未割当なら初期化
    • result[line] += 1
    • end
    Page: こういう「本筋に関係ない」 ロジックは邪魔だと 思いませんか!?
    • それだけ
    • じゃない
    Page:
    • 最初から
    • multiset で
    • やっていれば
    Page:
    • require &quot;rubygems&quot;
    • require &quot;multiset&quot;
    • result = Multiset.new
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result << line
    • end
    Page:
    • require &quot;rubygems&quot;
    • require &quot;multiset&quot;
    • result = Multiset.new
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result << line
    • end
    • result.each do |item|
    • puts &quot;#{item} is found&quot;
    • end
    Page:
    • 普通の配列と
    • 同じようにも扱える
    • ( ハッシュで集計して
    • るとそうはいかない )
    Page:
    • 熱い思いは
    • この辺にしておいて
    • 実用的な話を。
    Page:
    • (1)multiset の生成方法
    • result = Multiset.new
    • File.foreach(&quot;sample.txt&quot;) do |line|
    • result << line
    • end
    • data = File.readlines(&quot;sample.txt&quot;)
    • result = Multiset.new(data)
    • とも書ける
    Page:
    • (2)multimap:1 つのキーに対して
    • 複数の値を持てる連想配列
    • mm = Multimap.new
    • mm[&quot;Hatsune&quot;] << &quot;Miku&quot;
    • mm[&quot;Kagamine&quot;] << &quot;Rin&quot;
    • mm[&quot;Kagamine&quot;] << &quot;Len&quot;
    • p mm
    Page:
    • (2)multimap:1 つのキーに対して
    • 複数の値を持てる連想配列
    • mm = Multimap.new
    • mm[&quot;Hatsune&quot;] << &quot;Miku&quot;
    • mm[&quot;Kagamine&quot;] << &quot;Rin&quot;
    • mm[&quot;Kagamine&quot;] << &quot;Len&quot;
    • p mm
    • #<Multimap:&quot;Hatsune&quot;=>{#1 &quot;Miku&quot;},
    • &quot;Kagamine&quot;=>{#1 &quot;Rin&quot;, #1 &quot;Len&quot;}>
    Page:
    • おさらい
    Page:
    • multiset: 「アイテムとその個数」の組を 格納することに特化した データ構造
    • multiset ライブラリを 使うメリット ■直感的に書ける ■配列のごとく扱える
    Page:
    • インストール: gem install multiset
    • 使う前のおまじない: require &quot;rubygems&quot; require &quot;multiset&quot;
    • 初期化 Multiset.new( 配列 ) 配列は省略可能 ( 空の Multiset を生成 )
    Page:
    • ありがとう
    • ございました
    Page: