Gunosy.go #2
container
Gunosy Inc.
自己紹介
• 印南 聡志 (いんなみ さとし)
• 6月にGunosyに入社
• Java/Ruby … 最近 Python/Go 始めました
Container
• http://golang.org/pkg/container/
• データのまとまりを扱うためのパッケージ
– List : 双方向連結リスト
– Ring : 循環リスト
– Heap : 二分木構造リスト(用Int...
List
• 双方向連結リスト
– 各エレメントが前後のエレメントへのリンク
(ポインタ)を所持
– インサートは高速だがインデックス参照は不可
– ジェネリクスの機能はなし
• 型アサーションを使う必要がある
Element
value
El...
List – type Element
• type Element
– 双方向リストの要素(エレメント)、格納するデータ、
前後のリストのリンクを持つ
– Value interface{}
– func (*Element) Next
– ...
List – type List
• type List
func New() *List
func (l *List) Back() *Element
func (l *List) Front() *Element
func (l *List...
List http://play.golang.org/p/7GnwWoC-_s
出力:
1
2
3
4
Ring
• 循環リスト
• どのリング要素のポインタもリング全体への参照と
して使用可能
• (Javaのような)ジェネリクスの機能はなし
• 型アサー(ry
prev *Ring
next *Ring
prev *Ringprev *Rin...
Ring – type Ring
func New(n int) *Ring
func (r *Ring) Do(f func(interface{}))
func (r *Ring) Len() int
func (r *Ring) Link...
Ring http://play.golang.org/p/2SqEm4PGHT
出力:
要素数: 10
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Heap
• 二分木構造
• 取り出される値が常に最小になる
– Init, Fix, Pop, Push, Remove実行時にmin-heapが
走る
• List, Ringとは異なり自身で定義した配列型に
heap.interfaceを...
Heap
• 実装する必要のある関数
– func(Interface) Pop()
– func(Interface) Push()
– func (Interface) Len()
– func (Interface) Less()
– f...
まとめ
• Container
– データのまとまりを便利に扱うためのパッケージ
• List : 双方向連結リスト
• Ring : 循環リスト
• Heap : 2分木構造
– インサートが高速
– インデックスでの要素指定ができない
Upcoming SlideShare
Loading in …5
×

Gunosy.go #2 container

755 views

Published on

Published in: Software
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
755
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
2
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • func New(n int) *Ring
        func (r *Ring) Do(f func(interface{}))
        func (r *Ring) Len() int
        func (r *Ring) Link(s *Ring) *Ring
        func (r *Ring) Move(n int) *Ring
        func (r *Ring) Next() *Ring
        func (r *Ring) Prev() *Ring
        func (r *Ring) Unlink(n int) *Ring
  • Gunosy.go #2 container

    1. 1. Gunosy.go #2 container Gunosy Inc.
    2. 2. 自己紹介 • 印南 聡志 (いんなみ さとし) • 6月にGunosyに入社 • Java/Ruby … 最近 Python/Go 始めました
    3. 3. Container • http://golang.org/pkg/container/ • データのまとまりを扱うためのパッケージ – List : 双方向連結リスト – Ring : 循環リスト – Heap : 二分木構造リスト(用Interface)
    4. 4. List • 双方向連結リスト – 各エレメントが前後のエレメントへのリンク (ポインタ)を所持 – インサートは高速だがインデックス参照は不可 – ジェネリクスの機能はなし • 型アサーションを使う必要がある Element value Element value Element value root next *Element prev *Element next *Element prev *Element
    5. 5. List – type Element • type Element – 双方向リストの要素(エレメント)、格納するデータ、 前後のリストのリンクを持つ – Value interface{} – func (*Element) Next – func (*Element) Prev
    6. 6. List – type List • type List func New() *List func (l *List) Back() *Element func (l *List) Front() *Element func (l *List) Init() *List func (l *List) InsertAfter(v interface{}, mark *Element) *Element func (l *List) InsertBefore(v interface{}, mark *Element) *Element func (l *List) Len() int func (l *List) MoveAfter(e, mark *Element) func (l *List) MoveBefore(e, mark *Element) func (l *List) MoveToBack(e *Element) func (l *List) MoveToFront(e *Element) func (l *List) PushBack(v interface{}) *Element func (l *List) PushBackList(other *List) func (l *List) PushFront(v interface{}) *Element func (l *List) PushFrontList(other *List) func (l *List) Remove(e *Element) interface{}
    7. 7. List http://play.golang.org/p/7GnwWoC-_s 出力: 1 2 3 4
    8. 8. Ring • 循環リスト • どのリング要素のポインタもリング全体への参照と して使用可能 • (Javaのような)ジェネリクスの機能はなし • 型アサー(ry prev *Ring next *Ring prev *Ringprev *Ring next *Ring next *Ring
    9. 9. Ring – type Ring func New(n int) *Ring func (r *Ring) Do(f func(interface{})) func (r *Ring) Len() int func (r *Ring) Link(s *Ring) *Ring func (r *Ring) Move(n int) *Ring func (r *Ring) Next() *Ring func (r *Ring) Prev() *Ring func (r *Ring) Unlink(n int) *Ring
    10. 10. Ring http://play.golang.org/p/2SqEm4PGHT 出力: 要素数: 10 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
    11. 11. Heap • 二分木構造 • 取り出される値が常に最小になる – Init, Fix, Pop, Push, Remove実行時にmin-heapが 走る • List, Ringとは異なり自身で定義した配列型に heap.interfaceを実装
    12. 12. Heap • 実装する必要のある関数 – func(Interface) Pop() – func(Interface) Push() – func (Interface) Len() – func (Interface) Less() – func (Interface) Swap() デモ:http://play.golang.org/p/QIxb4gHIkW
    13. 13. まとめ • Container – データのまとまりを便利に扱うためのパッケージ • List : 双方向連結リスト • Ring : 循環リスト • Heap : 2分木構造 – インサートが高速 – インデックスでの要素指定ができない

    ×