美文网首页
索引的作用

索引的作用

作者: 酷走天涯 | 来源:发表于2018-12-27 09:49 被阅读20次
    • 如何创建一个索引
    • 使用正则表达式索引
    • 将索引写入io.writer
    • 将数据读取到索引中

    索引实现了一个快速子字符串的索引,比如我们要在字符传'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)
    }
    

    相关文章

      网友评论

          本文标题:索引的作用

          本文链接:https://www.haomeiwen.com/subject/quvpqqtx.html