forked from RadhiFadlillah/go-sastrawi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dictionary.go
61 lines (51 loc) · 1.36 KB
/
dictionary.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package sastrawi
import (
"fmt"
)
// Dictionary is map[string]struct{} that used as root words database
type Dictionary map[string]struct{}
// NewDictionary creates new Dictionary with words as its content
func NewDictionary(words ...string) Dictionary {
dict := make(map[string]struct{})
for _, word := range words {
dict[word] = struct{}{}
}
return Dictionary(dict)
}
// Count returns the size of dictionary
func (dictionary Dictionary) Count() int {
return len(dictionary)
}
// Contains is used for to check if word exists within dictionary
func (dictionary Dictionary) Contains(word string) bool {
_, found := dictionary[word]
return found
}
// Add is used to append new words to dictionary
func (dictionary Dictionary) Add(words ...string) {
for _, word := range words {
dictionary[word] = struct{}{}
}
}
// Remove is used to remove some words from dictionary
func (dictionary Dictionary) Remove(words ...string) {
for _, word := range words {
delete(dictionary, word)
}
}
// Print is used for printing content of dictionary, where each word is separated by separator
func (dictionary Dictionary) Print(separator string) {
if separator == "" {
separator = ", "
}
index := 0
lenDictionary := len(dictionary)
for word := range dictionary {
index++
if index >= lenDictionary {
fmt.Println(word)
} else {
fmt.Print(word, separator)
}
}
}