1 Star 0 Fork 0

kzangv/gsf-lib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
split.go 2.58 KB
一键复制 编辑 原始数据 按行查看 历史
kzangv 提交于 2023-04-19 15:56 . fixed
package glib
import (
"golang.org/x/exp/constraints"
"strconv"
"strings"
)
// SplitInt split 切割 int
func SplitInt[T constraints.Signed](s, sep string) ([]T, error) {
ss := strings.Split(s, sep)
r := make([]T, 0, len(ss))
for _, v := range ss {
iv, err := strconv.ParseInt(v, 10, 64)
if err != nil {
return nil, err
}
r = append(r, T(iv))
}
return r, nil
}
// SplitUint split 切割 uint
func SplitUint[T constraints.Unsigned](s, sep string) ([]T, error) {
ss := strings.Split(s, sep)
r := make([]T, 0, len(ss))
for _, v := range ss {
iv, err := strconv.ParseUint(v, 10, 64)
if err != nil {
return nil, err
}
r = append(r, T(iv))
}
return r, nil
}
// SplitFloat split 切割 float
func SplitFloat[T constraints.Float](s, sep string) ([]T, error) {
ss := strings.Split(s, sep)
r := make([]T, 0, len(ss))
for _, v := range ss {
iv, err := strconv.ParseFloat(v, 32)
if err != nil {
return nil, err
}
r = append(r, T(iv))
}
return r, nil
}
/* SplitSlice *******************************/
// SplitSliceData split 切割 slice 数据结构
type SplitSliceData interface {
Len() int
Compare(i, j int) bool
}
// SplitSlice split 切割 slice
func SplitSlice(v SplitSliceData, sHandle func(b, e int) error) error {
for b, i, l := 0, 1, v.Len(); i <= l; b, i = i, i+1 {
for i < l && v.Compare(b, i) {
i++
}
if err := sHandle(b, i); err != nil {
return err
}
}
return nil
}
// SplitSliceEx split 切割 slice
func SplitSliceEx(v SplitSliceData, sHandle func(b, e int) error, eHandle func(i int) error) error {
for b, i, l := 0, 1, v.Len(); i <= l; b, i = i, i+1 {
if err := eHandle(b); err != nil {
return err
}
for ; i < l && v.Compare(b, i); i++ {
if err := eHandle(i); err != nil {
return err
}
}
if err := sHandle(b, i); err != nil {
return err
}
}
return nil
}
// SplitSliceTmp split 切割 slice
func SplitSliceTmp[T any](v []T, cHandle func(a, b *T) bool, sHandle func(b, e int) error) error {
for b, i, l := 0, 1, len(v); i <= l; b, i = i, i+1 {
for i < l && cHandle(&v[b], &v[i]) {
i++
}
if err := sHandle(b, i); err != nil {
return err
}
}
return nil
}
// SplitSliceTmpEx split 切割 slice
func SplitSliceTmpEx[T any](v []T, cHandle func(a, b *T) bool, sHandle func(b, e int) error, eHandle func(i int) error) error {
for b, i, l := 0, 1, len(v); i <= l; b, i = i, i+1 {
if err := eHandle(b); err != nil {
return err
}
for ; i < l && cHandle(&v[b], &v[i]); i++ {
if err := eHandle(i); err != nil {
return err
}
}
if err := sHandle(b, i); err != nil {
return err
}
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kzangv/gsf-lib.git
git@gitee.com:kzangv/gsf-lib.git
kzangv
gsf-lib
gsf-lib
v0.2.1

搜索帮助