Skip to content

Repository files navigation

包(github.com/yudeguang/slice),用于切片处理时经常会遇到的一些操作,主要包括如下函数:

  • Copy 安全复制

  • Contains 判断是否包含

  • InsertIgnore 插入不重复元素

  • DeleteByElement 根据元素删除(不会改变原有切片)

  • DeleteByIndex 根据下标范围删除,也可以只删除单个下标位置的元素(不会改变原有切片)

  • Distinct 去重复(元素个数较大时会自动切换为hash算法)

  • InnerJoin 内连接(元素个数较大时会自动切换为hash算法)

  • Union 合并去重(元素个数较大时会自动切换为hash算法)

  • NotIn 相减--返回mNotInN(元素个数较大时会自动切换为hash算法)

  • Left 返回左侧若干元素

  • Right 返回右侧若干元素

  • Reverse 倒序排列

  • Shuffling 随机

  • Sort 排序

由于go暂时不支持泛型,所以目前是针对每一种基础类型(int,string等)都分别编写了所对应的相关函数。以string类型为列:

package main
import (
"fmt""github.com/yudeguang/slice""github.com/yudeguang/stringsx""log"
)
funcmain() {
log.SetFlags(log.Lshortfile|log.Ltime)
s1:="abcdefabcdef3434"s2:="bcdefgbcdefg02323"m:=stringsx.SplitByLen(s1, 1)
n:=stringsx.SplitByLen(s2, 1)
//先观察一下两个切片log.Println("原始m,n分别如下:")
log.Println("m为:")
log.Println(m)
log.Println("n为:")
log.Println(n)
//复制fmt.Println("")
log.Println("复制CopyString:")
copyM:=slice.CopyString(m)
log.Println("copyM为:")
log.Println(copyM)
log.Println("m为:")
log.Println(m)
log.Printf("copyM的地址:%p", copyM)
log.Printf(" m的地址:%p", m)
/* 增删改查 增:实现了InsertIgnore 删:实现以下两种,根据元素值删除DeleteByElement,根据下标索引位置删除DeleteByIndex	*///插入不重复数据fmt.Println("")
log.Println("插入不重复数据InsertIgnoreString:")
log.Println("m插入元素y后:")
log.Println(slice.InsertIgnoreString(m, "y"))
log.Println("m为:")
log.Println(m)
log.Println("m插入元素a后:")
log.Println(slice.InsertIgnoreString(m, "a"))
log.Println("m为:")
log.Println(m)
//删除某个元素fmt.Println("")
log.Println("删除元素DeleteByElementString:")
log.Println("m删除元素a后的结果为:")
log.Println(slice.DeleteByElementString(m, "a"))
log.Println("m为:")
log.Println(m)
//删除第i个元素fmt.Println("")
log.Println("删除第i个元素DeleteByIndexString:")
log.Println("m删除下标为3的元素后的结果为:")
log.Println(slice.DeleteByIndexString(m, 3))
log.Println("m为:")
log.Println(m)
//删除一段元素fmt.Println("")
log.Println("删除一段元素DeleteByIndexString:")
log.Println("m删除下标从3到5(不包含5)的元素后的结果为:")
log.Println(slice.DeleteByIndexString(m, 3, 5))
log.Println("m为:")
log.Println(m)
//是否包含fmt.Println("")
log.Println("是否包含ContainsString:")
log.Println("m是否包含元素a", slice.ContainsString(m, "a"))
log.Println("m是否包含元素x", slice.ContainsString(m, "x"))
log.Println("m为:")
log.Println(m)
//去重复fmt.Println("")
log.Println("去重复DistinctString:")
log.Println("m去重复后的结果为:")
log.Println(slice.DistinctString(m))
log.Println("m为:")
log.Println(m)
/* 集合操作,实现了: innerJoin union notin	*///内连接fmt.Println("")
log.Println("内连接innerJoinString:")
log.Println("m与n内连接结果为:")
log.Println(slice.InnerJoinString(m, n))
log.Println("m为:")
log.Println(m)
log.Println("n为:")
log.Println(n)
//合并去重fmt.Println("")
log.Println("合并去重UnionString:")
log.Println("m与n合并去重结果为:")
log.Println(slice.UnionString(m, n))
log.Println("m为:")
log.Println(m)
log.Println("n为:")
log.Println(n)
//集合m不在集合n中的元素即m-n 注意,不对m做去重操作fmt.Println("")
log.Println("相减NotInString:")
log.Println("m-n结果为:")
log.Println(slice.NotInString(m, n))
log.Println("m为:")
log.Println(m)
log.Println("n为:")
log.Println(n)
/* 以下操作会改变切片本身 Reverse sort Shuffling	*///倒序fmt.Println("")
log.Println("倒序ReverseString:")
slice.ReverseString(m)
log.Println("m为:")
log.Println(m)
//从小到大排序fmt.Println("")
log.Println("排序SortString:")
slice.SortString(m)
log.Println("m为:")
log.Println(m)
//随机打乱fmt.Println("")
log.Println("随机打乱ShufflingString:")
slice.ShufflingString(m)
log.Println("m为:")
log.Println(m)
slice.ShufflingString(m)
log.Println("m为:")
log.Println(m)
}

执行结果如下:

22:32:41 main.go:17: 原始m,n分别如下:
22:32:41 main.go:18: m为:
22:32:41 main.go:19: [abcdefabcdef3434]
22:32:41 main.go:20: n为:
22:32:41 main.go:21: [bcdefgbcdefg02323]
22:32:41 main.go:25: 复制CopyString:
22:32:41 main.go:27: copyM为:
22:32:41 main.go:28: [abcdefabcdef3434]
22:32:41 main.go:29: m为:
22:32:41 main.go:30: [abcdefabcdef3434]
22:32:41 main.go:31: copyM的地址:0xc04208610022:32:41 main.go:32: m的地址:0xc04208600022:32:41 main.go:40: 插入不重复数据InsertIgnoreString:
22:32:41 main.go:41: m插入元素y后:
22:32:41 main.go:42: [abcdefabcdef3434y]
22:32:41 main.go:43: m为:
22:32:41 main.go:44: [abcdefabcdef3434]
22:32:41 main.go:45: m插入元素a后:
22:32:41 main.go:46: [abcdefabcdef3434]
22:32:41 main.go:47: m为:
22:32:41 main.go:48: [abcdefabcdef3434]
22:32:41 main.go:52: 删除元素DeleteByElementString:
22:32:41 main.go:53: m删除元素a后的结果为:
22:32:41 main.go:54: [bcdefbcdef3434]
22:32:41 main.go:55: m为:
22:32:41 main.go:56: [abcdefabcdef3434]
22:32:41 main.go:60: 删除第i个元素DeleteByIndexString:
22:32:41 main.go:61: m删除下标为3的元素后的结果为:
22:32:41 main.go:62: [abcefabcdef3434]
22:32:41 main.go:63: m为:
22:32:41 main.go:64: [abcdefabcdef3434]
22:32:41 main.go:68: 删除一段元素DeleteByIndexString:
22:32:41 main.go:69: m删除下标从3到5(不包含5)的元素后的结果为:
22:32:41 main.go:70: [abcfabcdef3434]
22:32:41 main.go:71: m为:
22:32:41 main.go:72: [abcdefabcdef3434]
22:32:41 main.go:76: 是否包含ContainsString:
22:32:41 main.go:77: m是否包含元素atrue22:32:41 main.go:78: m是否包含元素xfalse22:32:41 main.go:79: m为:
22:32:41 main.go:80: [abcdefabcdef3434]
22:32:41 main.go:84: 去重复DistinctString:
22:32:41 main.go:85: m去重复后的结果为:
22:32:41 main.go:86: [abcdef34]
22:32:41 main.go:87: m为:
22:32:41 main.go:88: [abcdefabcdef3434]
22:32:41 main.go:97: 内连接innerJoinString:
22:32:41 main.go:98: m与n内连接结果为:
22:32:41 main.go:99: [bcdef3]
22:32:41 main.go:100: m为:
22:32:41 main.go:101: [abcdefabcdef3434]
22:32:41 main.go:102: n为:
22:32:41 main.go:103: [bcdefgbcdefg02323]
22:32:41 main.go:107: 合并去重UnionString:
22:32:41 main.go:108: m与n合并去重结果为:
22:32:41 main.go:109: [abcdef34g02]
22:32:41 main.go:110: m为:
22:32:41 main.go:111: [abcdefabcdef3434]
22:32:41 main.go:112: n为:
22:32:41 main.go:113: [bcdefgbcdefg02323]
22:32:41 main.go:117: 相减NotInString:
22:32:41 main.go:118: m-n结果为:
22:32:41 main.go:119: [aa44]
22:32:41 main.go:120: m为:
22:32:41 main.go:121: [abcdefabcdef3434]
22:32:41 main.go:122: n为:
22:32:41 main.go:123: [bcdefgbcdefg02323]
22:32:41 main.go:132: 倒序ReverseString:
22:32:41 main.go:134: m为:
22:32:41 main.go:135: [4343fedcbafedcba]
22:32:41 main.go:139: 排序SortString:
22:32:41 main.go:141: m为:
22:32:41 main.go:142: [3344aabbccddeeff]
22:32:41 main.go:146: 随机打乱ShufflingString:
22:32:41 main.go:148: m为:
22:32:41 main.go:149: [bc434eca3aebfdfd]
22:32:41 main.go:151: m为:
22:32:41 main.go:152: [aa4b3f3ec4dcdbfe]

About

对切片的各类操作,如去重Distinct,求交集InnerJoin,合集FullJoin等

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages