索引的作用

2018-12-27  本文已影响20人  酷走天涯

索引实现了一个快速子字符串的索引,比如我们要在字符传'1234445555644',查找所有字符4出现的下标,使用索引就能已最快的速度计算

创建索引

New 为数据创建一个新的索引。对于N = len(data),索引创建时间为 O(N*log(N))

func (x *Index) Lookup(s []byte, n int) (result []int)

package main

import (
  "index/suffixarray"
  "fmt"
)

func main() {
  s := []byte("12345672890")
  index := suffixarray.New(s)
  result := index.Lookup([]byte("2"),2)
  fmt.Println(result)
}
image.png

搜索子字符串出现在字符串中的位置,Lookup参数n表示查找几个,-1 表示查找所有的位置下标


使用正则表达式索引子串位置

如果对正则表达式不清楚,请先看正则表达式章节

package main

import (
"index/suffixarray"
"fmt"
  "regexp"
)

func main() {
  s := []byte("12422222")
  index := suffixarray.New(s)
  reg := regexp.MustCompile(`2+`)
  result := index.FindAllIndex(reg,-1)
  fmt.Println(result)
}
image.png

将索引写入io.writer

package main

import (
"index/suffixarray"
"fmt"
 "bytes"
)

func main() {
  s := []byte("ab")
  index := suffixarray.New(s)
  var w  bytes.Buffer
  index.Write(&w)
  fmt.Println(string(string(w.Bytes())))
}
image.png

将数据读取到索引中

func (x *Index) Read(r io.Reader) error

package main

import (
"index/suffixarray"
"fmt"
 "bytes"
  )
func main() {
  var index *suffixarray.Index = new(suffixarray.Index)
  var w = new(bytes.Buffer)
  w.WriteString("abcd")
  fmt.Println(w)
  index.Read(w)
  fmt.Println(index)
}
上一篇 下一篇

猜你喜欢

热点阅读