Task 05 字典、字符串

一.字典

字典
和数组以及切片一样, 字典是用来保存一组相同类型的数据的。数组和切片可以通过索引获得对应元素的值,数组和切片的索引是系统自动从0开始递增生成的。字典可以通过key获得对应元素的值,字典的key必须我们自己指定。
map是一种较为特殊的数据结构,在任何一种编程语言中都可以看见他的身影,它是一种键值对结构,通过给定的key可以快速获得对应的value。

如何定义字典
格式: var 字典名称 map[key的数据类型]value的数据类型

var m1 map[string]int
m2 := make(map[int]interface{}, 100)
m3 := map[string]string{
	"name": "james",
	"age":  "35",
}

如何给字典初始化

  1. 常规方法
     // 1.定义一个字典变量
     var dict map[int]int
     dict = map[int]int{0:1, 1:3, 2:5}
     // 3.使用创建好的字典变量
    fmt.Println(dict)  //map[0:1 1:3 2:5]
    dict[0] = 666
    fmt.Println(dict)  //map[0:666 1:3 2:5]
  1. 通过语法糖来创建
 //通过语法糖来创建一个字典(初始化)
   dicx := map[int]string{2:"lll",3:"dou",5:"hhh"}
   fmt.Println(dicx)   //不一定按顺序
  1. 通过make(字典数据类型,长度)
    var dict map[int]int
    // 2.通过make函数创建一个字典(初始化)
     // 在企业开发中, 如果事先知道字典中需要保存多少条数据, 那么建议指定字典的长度
    dict = make(map[int]int, 3)
    // 3.使用创建好的字典变量
    fmt.Println(dict)  //map[]
        fmt.Println(len(dict))//0
    dict[0] = 123
    dict[1] = 456
    dict[2] = 789
    dict[3] = 999
    fmt.Println(dict)   //map[0:123 1:456 2:789 3:999]
    fmt.Println(len(dict))//4  虽然指定了长度但是会扩容
  1. 通过make(字典数据类型)
    var dict4 map[int]string
    dict4 = make(map[int]string)
    dict4[2]="emmmm"
    dict4[0]="lyw"
    dict4[1]="zjw"
    fmt.Println(len(dict4))
    fmt.Println(dict4)
    //遍历出来键值对的顺序是按照赋值的顺序,与键(key)的序号无关
    for key,value:=range dict4{
        fmt.Println("key=",key,"value=",value)
    }  //map[1:zjw 2:emmmm 0:lyw]

字符串

字符串定义
一个字符串是一个不可改变的字节序列,字符串可以包含任意的数据,但是通常是用来包含可读的文本,字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码表上的字符时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。
字符串是一种值类型,在创建字符串之后其值是不可变的,也就是说下面这样操作是不允许的。

s := “hello”
s[0] = ‘T’

编译器会提示cannot assign to s[0]。在C语言中字符串是通过\0来标识字符串的结束,而go语言中是通过长度来标识字符串是否结束的。

strings包
strings包提供了许多操作字符串的函数。
示例:

func main() {
	var str string = "This is an example of a string"
	//判断字符串是否以Th开头
	fmt.Printf("%t\n", strings.HasPrefix(str, "Th"))
	//判断字符串是否以aa结尾
	fmt.Printf("%t\n", strings.HasSuffix(str, "aa"))
	//判断字符串是否包含an子串
	fmt.Printf("%t\n", strings.Contains(str, "an"))
}

strconv包

strconv包实现了基本数据类型与字符串之间的转换。
示例:

i, err := strconv.Atoi("-42") //将字符串转为int类型
s := strconv.Itoa(-42) //将int类型转为字符串

若转换失败则返回对应的error值。

字符串拼接
SPrintf

const numbers = 100

func BenchmarkSprintf(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var s string
		for i := 0; i < numbers; i++ {
			s = fmt.Sprintf("%v%v", s, i)
		}
	}
	b.StopTimer()
}

+拼接

func BenchmarkStringAdd(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var s string
		for i := 0; i < numbers; i++ {
			s += strconv.Itoa(i)
		}
	}
	b.StopTimer()
}

bytes.Buffer

func BenchmarkBytesBuf(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var buf bytes.Buffer
		for i := 0; i < numbers; i++ {
			buf.WriteString(strconv.Itoa(i))
		}
		_ = buf.String()
	}
	b.StopTimer()
}

strings.Buildr拼接

func BenchmarkStringBuilder(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var builder strings.Builder
		for i := 0; i < numbers; i++ {
			builder.WriteString(strconv.Itoa(i))
		}
		_ = builder.String()
	}
	b.StopTimer()
}

参考
DatawhaleChina
C语言中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值