go提案:新包提供通用切片功能

2021-05-05 20:55:47

//包切片定义了有用的任何类型的切片有用的各种功能。 //除非另有说明,否则这些功能都适用于索引0< i<的切片的元素//。镜片)。包切片导入"约束" //查看45458 //等于报告两个切片是否相等:相同的长度和所有//元素相等。浮点NAN不被认为是平等的。 //以索引顺序进行比较元素,并且比较//在第一个不平等对时停止。 Func等于[T可比性](S1,S2 [] T)BOOL // CompardFUNC报告两个切片是否使用每对元素上的比较//函数相等。在//索引顺序中比较元素,并且比较在第一个索引处停止// eq返回false。 Func CompandFunc [T Any](S1,S2 [] T,EQ Func(T,T)Bool)Bool //比较S1和S2的词典比较。 //在索引0时顺序地比较元素0,//直到一个元素不等于另一个元素。比较//第一个非匹配元素的结果是比较的结果。 //如果两个切片相等,直到其中一个结束,则较短的切片是//词典地小于较长越长,如果S1 == S2,-1(如果S1)为0,则为0。 S2,和+1如果S1> S2。 Func比较[T约束。订购](S1,S2 [] t)int // comparefunc就像比较,但在每对元素上使用比较函数//。将元素以索引顺序进行比较,//在第一次CMP返回非零之后停止比较。 //结果将是CMP的第一个非零结果;如果CMP始终//返回0,则结果为0如果LEN(S1)== LEN(S2),-1,则为LEN(S1)&len; len(s2),//和+1如果len(s1)> Len(S2)。 Func CompareFunc [T Any](S1,S2 [] T,CMP Func(T,T)Int)int // index返回s的第一个出现的索引,如果不存在,则为-1。 Func索引[t可比性](s [] t,v t)int // indexfunc就像索引,但使用比较函数。 func indexfunc [t aft](s [] t,v t,cmp func(t,t)bool)int //包含报告是否存在v。 Func包含[t可比性](s [] t,v t)bool // containtfunc就像包含的那样,但它使用比较函数。 func containerfunc [t your](s [] t,v t,cmp func(t,t)bool)bool // lastindex? lastindexfunc? //地图使用映射函数将A [] T1至A [] T2旋转。 Func映射[T1,T2 ANY](S [] T1,F FURCC(T1)T2)[] T2 //过滤器返回包含S中的所有元素E的新切片,其中保持(e)为真。 Func滤波器[T AUTH](S [] T,保持FUNC(T)BOOL)[] T //使用//减少T2类型的单个值,使用//减少函数。这累积地适用于s的元素。 //例如,如果s一片Int,则s的元素的总和为//缩小(s,0,func(a,b int)int {return a + b})。 Func减少[T1,T2,初始化器T2,F FURCC(T2,T1)T2)T2 // MapInplace使用映射函数//转换它们的值,将SRC到DST中的元素复制。如果Len(DST)< Len(SRC)。 //(或者我们可以返回Min(Len(DST),Len(SRC))如果似乎更好。)Func MapInplace [类型D,S](DST [] D,SRC [] S,F Func(S)D )// verticeinplace修改s仅包含保留(e)为true的元素。 //它返回修改后的切片。 Func FilterInPlace [T AUTH](S [] T,将FUNC(T)BOOL)[] T //在索引I中插入插入v进入s,返回修改后的切片。 //在返回的切片r中,r [i] == v。这个恐慌if!(i> = 0& i< len(s))。 //这个函数是o(len(s))。 Func插入[T Any](S [] T,I INT,V T)[] T //插入leLICE在索引I中将SI插入S中,返回修改后的切片。 //在返回的Slice R中,R [I] == SI [0](除非SI为空)。 //如果是这个恐慌if!(i> = 0&&我&len(s))。 Func InsertSlice [T Any](s,si [] t,i int)[] t //删除从s的索引i中删除元素,返回修改后的切片。 //这种情况如果!(i> = 0&& i< len(s))。此功能是O(len(s))。 //这改变了切片的内容;它不会创建一个新的切片。 Func删除[T Any](s [] t,i int)[] t // removeslice从索引i开始从s开始删除j-i元素,返回修改后的切片。 //这可以被认为是反向切片表达式:它删除了一个sublice。 //如果我< 0 || j< I || j>镜片)。 //这改变了切片的内容;它不会创建一个新的切片。 func removeslice [t aft](s [] t,i,j int)[] t //用长度c调整返回s returns s。如果长度增加,新的尾随//元素将设置为t的零值。未指定返回//切片的容量。 Func调整[T Any](s [] t,c int)[] t