数据结构
字符串 string
-
访问字符串中的值
- 通过下标访问
s1 := "hello world" first := s[0]
- 通过切片访问
s2 := []byte(s1) first := s2[0]
- 通过for-range循环访问
for i, v := range s1 { fmt.Println(i, v) }
-
查询字符是否属于特定字符集
// 判断字符串中是否包含a、b、c中的任意一个字符
strings.ContainsAny(s1, "abc")
// 判断字符串中是否包含abc子串
strings.Contains(s1, "abc")
// 判断字符串中是否包含a字符
strings.ContainsRune(s1, 'a')
- 比较两个字符串
- ==
if s1 == s2 { fmt.Println("s1 == s2") }
- strings.Compare, 1大于,0相等,-1小于
if strings.Compare(s1, s2) == 0 { fmt.Println("s1 == s2") }
- strings.EqualFold, 忽略大小写
if strings.EqualFold(s1, s2) { fmt.Println("s1 == s2") }
- 字符串拼接
- 加号
s3 := s1 + s2
- strings.Join
s3 := strings.Join([]string{s1, s2}, "")
- 高效拼接字符串
或者var buffer bytes.Buffer buffer.WriteString(s1) buffer.WriteString(s2) s3 := buffer.String()
var builder strings.Builder buffer.WriteString(s1) buffer.WriteString(s2) s3 := buffer.String()
slice模拟stack
- 创建栈
stack := make([]int, 0)
- 入栈
stack = append(stack, 1)
- 出栈
if len(stack) > 0 { stack = stack[:len(stack)-1] }
- 判断栈是否为空
if len(stack) == 0 { fmt.Println("stack is empty") }
slice模拟Queue
- 创建队列
queue := make([]int, 0)
- 入队
queue = append(queue, 1)
- 出队
if len(queue) > 0 { queue = queue[1:] }
- 判断队列是否为空
if len(queue) == 0 { fmt.Println("queue is empty") }
slice模拟Set
- 创建集合
set := make(map[byte]struct{})
- 添加元素
set['a'] = struct{}{}
- 删除元素
delete(set, 'a')
- 判断元素是否存在
if _, ok := set['a']; ok { fmt.Println("a is in set") }