前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >索引的作用

索引的作用

作者头像
酷走天涯
发布2019-05-26 16:21:22
4970
发布2019-05-26 16:21:22
举报
  • 如何创建一个索引
  • 使用正则表达式索引
  • 将索引写入io.writer
  • 将数据读取到索引中

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

创建索引

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

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

代码语言:javascript
复制
package main

import (
  "index/suffixarray"
  "fmt"
)

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

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


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

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

代码语言:javascript
复制
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)
}
将索引写入io.writer
代码语言:javascript
复制
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())))
}

将数据读取到索引中

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

代码语言:javascript
复制
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)
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建索引
  • 使用正则表达式索引子串位置
  • 将索引写入io.writer
  • 将数据读取到索引中
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档