mirror of
https://github.com/uptrace/go-clickhouse.git
synced 2025-06-08 23:26:11 +02:00
54 lines
807 B
Go
54 lines
807 B
Go
package chschema
|
|
|
|
type lowCard struct {
|
|
slice sliceMap
|
|
dict map[string]int
|
|
}
|
|
|
|
func (lc *lowCard) Add(word string) int {
|
|
if i, ok := lc.dict[word]; ok {
|
|
return i
|
|
}
|
|
|
|
if lc.dict == nil {
|
|
lc.dict = make(map[string]int)
|
|
}
|
|
|
|
i := lc.slice.Add(word)
|
|
lc.dict[word] = i
|
|
|
|
return i
|
|
}
|
|
|
|
func (lc *lowCard) Dict() []string {
|
|
return lc.slice.Slice()
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
type sliceMap struct {
|
|
ss []string
|
|
}
|
|
|
|
func (m sliceMap) Len() int {
|
|
return len(m.ss)
|
|
}
|
|
|
|
func (m sliceMap) Get(word string) (int, bool) {
|
|
for i, s := range m.ss {
|
|
if s == word {
|
|
return i, true
|
|
}
|
|
}
|
|
return 0, false
|
|
}
|
|
|
|
func (m *sliceMap) Add(word string) int {
|
|
m.ss = append(m.ss, word)
|
|
return len(m.ss) - 1
|
|
}
|
|
|
|
func (m sliceMap) Slice() []string {
|
|
return m.ss
|
|
}
|