Go语言中的切片操作


=Start=

缘由:

在阅读《Go语言程序设计》的字符串操作那一章时看到的内容,里面的代码挺实用的,就记录下来了;后来发现在Golang的Wiki里面有更为全面、详细的介绍/技巧:SliceTricks

记录:
// 内置的 append() 函数接受一个切片和一个或者更多值,将参数中的值插入原始切片末尾,返回一个(可能是新的)切片

// 自定义切片插入位置的功能函数
func InsertStringSliceCopy(slice, insertion []string, index int) []string {
	result := make([]string, len(slice)+len(insertion))
	at := copy(result, slice[:index])
	at += copy(result[at:], insertion)
	copy(result[at:], slice[index:])
	return result
}

// 自定义切片插入位置的功能函数2
func InsertStringSlice(slice, insertion []string, index int) []string {
	return append(slice[:index], append(insertion, slice[index:]...)...)
}

/*
在Go语言中删除切片中的元素:
删除切片开头、结尾的元素非常简单;从切片中间取元素也非常简单
从切片的中间删除元素就需要一点点技巧了(使用append将前后两部分拼接起来,并将值赋回给切片)
*/
// 自定义切片删除位置的功能函数
func RemoveStringSliceCopy(slice []string, start, end int) []string {
	result := make([]string, len(slice)-(end-start))
	at := copy(result, slice[:start])
	copy(result[at:], slice[end:])
	return result
}

// 自定义切片删除位置的功能函数2
func RemoveStringSlice(slice []string, start, end int) []string {
	return append(slice[:start], slice[end:]...)
}
参考链接:

=EOF=

,

《 “Go语言中的切片操作” 》 有 10 条评论

  1. 一个让业务开发效率提高10倍的golang库
    https://mp.weixin.qq.com/s/rdzICm4JxpJ5MUrz9brA_w
    https://www.cnblogs.com/yjf512/p/10818089.html
    https://github.com/jianfengye/collection
    `
    Golang 适不适合写业务?
    最近一个逻辑非常复杂的业务,我用 Golang 来开发。开发过程不断在问一个问题,Golang 适不适合写业务?

    业务说到底,是一大堆的逻辑,大量的逻辑都是在几个环节:获取数据,封装数据,组织数据,过滤数据,排序结果。获取/封装数据,即从 DB 中根据查询 SQL,获取表中的数据,并封装成数据结构。组织数据,例如,当我有两份数据源,我需要将两份数据源按照某个字段合并,那么这种组织数据的能力也是非常需要的。过滤数据,我获取的字段有10个,但是我只需要给前端返回3个就够了;排序结果,返回的结构按照某种顺序。这些都是我们在写业务中,每个业务逻辑都会遇到的问题。一款适合做业务的语言一定是在这些环节上都提供足够的便利性的。

    Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。
    `

  2. Dig101:Go之灵活的slice
    https://mp.weixin.qq.com/s/r3ZJVdq0dTkA1xHinIVLUA
    `
    0x01 slice 到底是什么?

    0x02 slice 能比较么?

    0x03 花样的切片操作

    0x04 append 时发生了什么?

    0x05 append 内部优化
    扩容的策略是什么?
    扩容判断中`uint`的作用是啥?
    内存清零初始化: memclrNoHeapPointers vs typedmemclr?
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注