mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-09 15:12:26 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e31fb28003 | ||
|
|
fd271fe176 | ||
|
|
6890bbfe05 | ||
|
|
24ae47a12f | ||
|
|
d8d85efedf | ||
|
|
ba73847b80 |
4
.github/workflows/codecov.yml
vendored
4
.github/workflows/codecov.yml
vendored
@@ -1,11 +1,13 @@
|
|||||||
name: Test and coverage
|
name: test
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
# - v2
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
# - v2
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -6,9 +6,10 @@
|
|||||||
<div align="center" style="text-align: center;">
|
<div align="center" style="text-align: center;">
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
||||||
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
||||||
|
[](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)
|
||||||
[](https://codecov.io/gh/duke-git/lancet)
|
[](https://codecov.io/gh/duke-git/lancet)
|
||||||
[](https://github.com/duke-git/lancet/blob/main/LICENSE)
|
[](https://github.com/duke-git/lancet/blob/main/LICENSE)
|
||||||
|
|
||||||
@@ -393,7 +394,8 @@ func main() {
|
|||||||
|
|
||||||
```go
|
```go
|
||||||
func Contain(slice interface{}, value interface{}) bool //check if the value is in the slice or not
|
func Contain(slice interface{}, value interface{}) bool //check if the value is in the slice or not
|
||||||
func Chunk(slice []interface{}, size int) [][]interface{} //creates an slice of elements split into groups the length of `size`.
|
func ContainSubSlice(slice interface{}, subslice interface{}) bool //check if the slice contain subslice or not
|
||||||
|
func Chunk(slice []interface{}, size int) [][]interface{} //creates an slice of elements split into groups the length of `size`
|
||||||
func ConvertSlice(originalSlice interface{}, newSliceType reflect.Type) interface{} //convert originalSlice to newSliceType
|
func ConvertSlice(originalSlice interface{}, newSliceType reflect.Type) interface{} //convert originalSlice to newSliceType
|
||||||
func Difference(slice1, slice2 interface{}) interface{} //creates an slice of whose element not included in the other given slice
|
func Difference(slice1, slice2 interface{}) interface{} //creates an slice of whose element not included in the other given slice
|
||||||
func DeleteByIndex(slice interface{}, start int, end ...int) (interface{}, error) //delete the element of slice from start index to end index - 1
|
func DeleteByIndex(slice interface{}, start int, end ...int) (interface{}, error) //delete the element of slice from start index to end index - 1
|
||||||
@@ -401,7 +403,7 @@ func Drop(slice interface{}, n int) interface{} //creates a slice with `n` eleme
|
|||||||
func Every(slice, function interface{}) bool //return true if all of the values in the slice pass the predicate function, function signature should be func(index int, value interface{}) bool
|
func Every(slice, function interface{}) bool //return true if all of the values in the slice pass the predicate function, function signature should be func(index int, value interface{}) bool
|
||||||
func None(slice, function interface{}) bool // return true if all the values in the slice mismatch the criteria
|
func None(slice, function interface{}) bool // return true if all the values in the slice mismatch the criteria
|
||||||
func Filter(slice, function interface{}) interface{} //filter slice, function signature should be func(index int, value interface{}) bool
|
func Filter(slice, function interface{}) interface{} //filter slice, function signature should be func(index int, value interface{}) bool
|
||||||
func Find(slice, function interface{}) (interface{}, bool) //iterates over elements of slice, returning the first one that passes a truth test on function.function signature should be func(index int, value interface{}) bool .
|
func Find(slice, function interface{}) (interface{}, bool) //iterates over elements of slice, returning the first one that passes a truth test on function.function signature should be func(index int, value interface{}) bool
|
||||||
func FlattenDeep(slice interface{}) interface{} //flattens slice recursive
|
func FlattenDeep(slice interface{}) interface{} //flattens slice recursive
|
||||||
func ForEach(slice, function interface{}) //iterates over elements of slice and invokes function for each element, function signature should be func(index int, value interface{})
|
func ForEach(slice, function interface{}) //iterates over elements of slice and invokes function for each element, function signature should be func(index int, value interface{})
|
||||||
func IntSlice(slice interface{}) ([]int, error) //convert value to int slice
|
func IntSlice(slice interface{}) ([]int, error) //convert value to int slice
|
||||||
@@ -416,7 +418,7 @@ func SortByField(slice interface{}, field string, sortType ...string) error //so
|
|||||||
func Some(slice, function interface{}) bool //return true if any of the values in the list pass the predicate function, function signature should be func(index int, value interface{}) bool
|
func Some(slice, function interface{}) bool //return true if any of the values in the list pass the predicate function, function signature should be func(index int, value interface{}) bool
|
||||||
func StringSlice(slice interface{}) []string //convert value to string slice
|
func StringSlice(slice interface{}) []string //convert value to string slice
|
||||||
func Unique(slice interface{}) interface{} //remove duplicate elements in slice
|
func Unique(slice interface{}) interface{} //remove duplicate elements in slice
|
||||||
func Union(slices ...interface{}) interface{} //Union creates a slice of unique values, in order, from all given slices. using == for equality comparisons.
|
func Union(slices ...interface{}) interface{} //Union creates a slice of unique values, in order, from all given slices. using == for equality comparisons
|
||||||
func UpdateByIndex(slice interface{}, index int, value interface{}) (interface{}, error) //update the slice element at index.
|
func UpdateByIndex(slice interface{}, index int, value interface{}) (interface{}, error) //update the slice element at index.
|
||||||
func Without(slice interface{}, values ...interface{}) interface{} //creates a slice excluding all given values
|
func Without(slice interface{}, values ...interface{}) interface{} //creates a slice excluding all given values
|
||||||
func GroupBy(slice, function interface{}) (interface{}, interface{}) // groups slice into two categories
|
func GroupBy(slice, function interface{}) (interface{}, interface{}) // groups slice into two categories
|
||||||
|
|||||||
@@ -6,9 +6,10 @@
|
|||||||
<div align="center" style="text-align: center;">
|
<div align="center" style="text-align: center;">
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
||||||
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
||||||
|
[](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)
|
||||||
[](https://codecov.io/gh/duke-git/lancet)
|
[](https://codecov.io/gh/duke-git/lancet)
|
||||||
[](https://github.com/duke-git/lancet/blob/main/LICENSE)
|
[](https://github.com/duke-git/lancet/blob/main/LICENSE)
|
||||||
|
|
||||||
@@ -394,6 +395,7 @@ func main() {
|
|||||||
|
|
||||||
```go
|
```go
|
||||||
func Contain(slice interface{}, value interface{}) bool //判断slice是否包含value
|
func Contain(slice interface{}, value interface{}) bool //判断slice是否包含value
|
||||||
|
func ContainSubSlice(slice interface{}, subslice interface{}) bool //判断slice是否包含subslice
|
||||||
func Chunk(slice []interface{}, size int) [][]interface{} //均分slice
|
func Chunk(slice []interface{}, size int) [][]interface{} //均分slice
|
||||||
func ConvertSlice(originalSlice interface{}, newSliceType reflect.Type) interface{} //将originalSlice转换为 newSliceType
|
func ConvertSlice(originalSlice interface{}, newSliceType reflect.Type) interface{} //将originalSlice转换为 newSliceType
|
||||||
func Difference(slice1, slice2 interface{}) interface{} //返回切片,其元素在slice1中,不在slice2中
|
func Difference(slice1, slice2 interface{}) interface{} //返回切片,其元素在slice1中,不在slice2中
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const (
|
|||||||
compareGreater
|
compareGreater
|
||||||
)
|
)
|
||||||
|
|
||||||
// Assert is a simple implementation of assertion, only for internal useage
|
// Assert is a simple implementation of assertion, only for internal usage
|
||||||
type Assert struct {
|
type Assert struct {
|
||||||
T *testing.T
|
T *testing.T
|
||||||
CaseName string
|
CaseName string
|
||||||
@@ -154,9 +154,8 @@ func compare(x, y interface{}) int {
|
|||||||
default:
|
default:
|
||||||
if reflect.DeepEqual(x, y) {
|
if reflect.DeepEqual(x, y) {
|
||||||
return compareEqual
|
return compareEqual
|
||||||
} else {
|
|
||||||
return compareNotEqual
|
|
||||||
}
|
}
|
||||||
|
return compareNotEqual
|
||||||
}
|
}
|
||||||
|
|
||||||
return compareNotEqual
|
return compareNotEqual
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import (
|
|||||||
|
|
||||||
// Contain check if the value is in the iterable type or not
|
// Contain check if the value is in the iterable type or not
|
||||||
func Contain(iterableType interface{}, value interface{}) bool {
|
func Contain(iterableType interface{}, value interface{}) bool {
|
||||||
|
|
||||||
v := reflect.ValueOf(iterableType)
|
v := reflect.ValueOf(iterableType)
|
||||||
|
|
||||||
switch kind := reflect.TypeOf(iterableType).Kind(); kind {
|
switch kind := reflect.TypeOf(iterableType).Kind(); kind {
|
||||||
@@ -47,6 +46,30 @@ func Contain(iterableType interface{}, value interface{}) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContainSubSlice check if the slice contain subslice or not
|
||||||
|
func ContainSubSlice(slice interface{}, subslice interface{}) bool {
|
||||||
|
super := sliceValue(slice)
|
||||||
|
sub := sliceValue(subslice)
|
||||||
|
|
||||||
|
if super.Type().Elem().Kind() != sub.Type().Elem().Kind() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
unique := make(map[interface{}]bool)
|
||||||
|
for i := 0; i < super.Len(); i++ {
|
||||||
|
v := super.Index(i).Interface()
|
||||||
|
unique[v] = true
|
||||||
|
}
|
||||||
|
for i := 0; i < sub.Len(); i++ {
|
||||||
|
v := sub.Index(i).Interface()
|
||||||
|
if !unique[v] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// Chunk creates an slice of elements split into groups the length of `size`.
|
// Chunk creates an slice of elements split into groups the length of `size`.
|
||||||
func Chunk(slice []interface{}, size int) [][]interface{} {
|
func Chunk(slice []interface{}, size int) [][]interface{} {
|
||||||
var res [][]interface{}
|
var res [][]interface{}
|
||||||
|
|||||||
@@ -23,6 +23,15 @@ func TestContain(t *testing.T) {
|
|||||||
assert.Equal(false, Contain("abc", "d"))
|
assert.Equal(false, Contain("abc", "d"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContainSubSlice(t *testing.T) {
|
||||||
|
assert := internal.NewAssert(t, "TestContainSubSlice")
|
||||||
|
assert.Equal(true, ContainSubSlice([]string{"a", "a", "b", "c"}, []string{"a", "a"}))
|
||||||
|
assert.Equal(false, ContainSubSlice([]string{"a", "a", "b", "c"}, []string{"a", "d"}))
|
||||||
|
|
||||||
|
assert.Equal(true, ContainSubSlice([]int{1, 2, 3}, []int{1}))
|
||||||
|
assert.Equal(false, ContainSubSlice([]int{1, 2, 3}, []string{"a"}))
|
||||||
|
}
|
||||||
|
|
||||||
func TestChunk(t *testing.T) {
|
func TestChunk(t *testing.T) {
|
||||||
assert := internal.NewAssert(t, "TestChunk")
|
assert := internal.NewAssert(t, "TestChunk")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user