From 893b532b8bd148deda49d7104ffb43be55ed354d Mon Sep 17 00:00:00 2001 From: wangfeng Date: Wed, 22 Feb 2023 07:29:32 +0800 Subject: [PATCH] =?UTF-8?q?#I6GRQ5=20=E7=BB=99series=E6=B7=BB=E5=8A=A0Stri?= =?UTF-8?q?ngs=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 3 +++ go.sum | 23 +++++++++++++++---- series.go | 4 ++++ series_test.go | 7 ++++++ stat/ndarray.go | 4 ++++ stat/ndarray_test.go | 7 ++++++ stat/series.go | 2 ++ stat/type_xstring.go | 54 ++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 100 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 16fedd4..875292d 100644 --- a/go.mod +++ b/go.mod @@ -19,8 +19,11 @@ require ( require ( gitee.com/quant1x/gotdx v1.2.2 // indirect + github.com/dlclark/regexp2 v1.7.0 // indirect + github.com/dop251/goja v0.0.0-20230216180835-5937a312edda // indirect github.com/frankban/quicktest v1.11.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/google/btree v1.0.0 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/kr/pretty v0.3.0 // indirect diff --git a/go.sum b/go.sum index 0106255..3e941c8 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,27 @@ -gitee.com/quant1x/data v0.7.11 h1:1r8522HLLbOmNBYSuPsSc7kBFAUx60zwxC7C5NPAkiE= -gitee.com/quant1x/data v0.7.11/go.mod h1:s2uQHckGj/9lHN//aN8MD+ZNhyKh9Gcb5xtpGlJJ7QQ= -gitee.com/quant1x/gotdx v1.2.1 h1:oGJ42nJtYAr97xAiauYaY1IX9rOgVF1lGmxnsXxmKHs= -gitee.com/quant1x/gotdx v1.2.1/go.mod h1:tenxBV0i+c7ysRs+g8mv/1MYboaJhSy6muqJf2Uu0l0= +gitee.com/quant1x/data v0.7.12 h1:VGxe2ei/Cgkfnvqp8HAEdUJR6iBCh1jgYAo7/xobAm4= +gitee.com/quant1x/data v0.7.12/go.mod h1:S4NIyUGLPJGr8mkyyu9easPYD44cTJne9iN6tsfXj+0= +gitee.com/quant1x/gotdx v1.2.2 h1:sdlGRyD8b1YynJ1DCYGcMoYldtt5cJEOydAZ0GRQQWE= +gitee.com/quant1x/gotdx v1.2.2/go.mod h1:tenxBV0i+c7ysRs+g8mv/1MYboaJhSy6muqJf2Uu0l0= github.com/chewxy/math32 v1.10.1 h1:LFpeY0SLJXeaiej/eIp2L40VYfscTvKh/FSEZ68uMkU= github.com/chewxy/math32 v1.10.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20230216180835-5937a312edda h1:yWEvdMtib3RbPysHDTNf/c3gerF5r+iMcmhlAeE6hEk= +github.com/dop251/goja v0.0.0-20230216180835-5937a312edda/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/frankban/quicktest v1.11.2 h1:mjwHjStlXWibxOohM7HYieIViKyh56mmt3+6viyhDDI= github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -93,6 +103,8 @@ golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -104,8 +116,11 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/series.go b/series.go index 9709c45..55edfed 100644 --- a/series.go +++ b/series.go @@ -175,6 +175,10 @@ func (self *NDFrame) Ints() []stat.Int { return ns } +func (self *NDFrame) Strings() []string { + return stat.SliceToString(self.Values()) +} + func (self *NDFrame) Empty(t ...stat.Type) stat.Series { if len(t) > 0 { self.type_ = t[0] diff --git a/series_test.go b/series_test.go index 8af9d1f..3a753bd 100644 --- a/series_test.go +++ b/series_test.go @@ -92,3 +92,10 @@ func TestSeriesConcat(t *testing.T) { fmt.Println(s1) fmt.Println(s3) } + +func TestNDFrame_Strings(t *testing.T) { + d1 := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} + s1 := NewNDFrame[float64]("x", d1...) + ss := s1.Strings() + fmt.Println(ss) +} diff --git a/stat/ndarray.go b/stat/ndarray.go index d35e0d4..45bc1c5 100644 --- a/stat/ndarray.go +++ b/stat/ndarray.go @@ -39,6 +39,10 @@ func (self NDArray[T]) Ints() []Int { return d } +func (self NDArray[T]) Strings() []string { + return SliceToString(self.Values()) +} + func (self NDArray[T]) Empty(tv ...Type) Series { empty := []T{} return NDArray[T](empty) diff --git a/stat/ndarray_test.go b/stat/ndarray_test.go index a98621c..dafce14 100644 --- a/stat/ndarray_test.go +++ b/stat/ndarray_test.go @@ -77,3 +77,10 @@ func TestNDArray_Apply(t *testing.T) { }, true) fmt.Println(s2) } + +func TestNDArray_Strings(t *testing.T) { + d1 := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} + s1 := NewSeries[float64](d1...) + ss := s1.Strings() + fmt.Println(ss) +} diff --git a/stat/series.go b/stat/series.go index 504c930..da655cb 100644 --- a/stat/series.go +++ b/stat/series.go @@ -28,6 +28,8 @@ type Series interface { DTypes() []DType // Ints 强制转换成整型 Ints() []Int + // Strings 强制转换string切片 + Strings() []string // sort.Interface diff --git a/stat/type_xstring.go b/stat/type_xstring.go index afa0341..b850dcd 100644 --- a/stat/type_xstring.go +++ b/stat/type_xstring.go @@ -1,7 +1,10 @@ package stat import ( + "fmt" + "github.com/mymmsc/gox/exception" "github.com/mymmsc/gox/logger" + "reflect" "strconv" "strings" ) @@ -77,3 +80,54 @@ func AnyToString(v any) string { s := __anyToString(v) return s } + +func slice_any_to_string[T BaseType](s []T) []string { + count := len(s) + if count == 0 { + return []string{} + } + d := make([]string, count) + for idx, iv := range s { + d[idx] = anyToGeneric[string](iv) + } + return d +} + +// SliceToString any输入只能是一维slice或者数组 +func SliceToString(v any) []string { + switch values := v.(type) { + case []int8: + return slice_any_to_string(values) + case []uint8: + return slice_any_to_string(values) + case []int16: + return slice_any_to_string(values) + case []uint16: + return slice_any_to_string(values) + case []int32: + return slice_any_to_string(values) + case []uint32: + return slice_any_to_string(values) + case []int64: + return slice_any_to_string(values) + case []uint64: + return slice_any_to_string(values) + case []int: + return slice_any_to_string(values) + case []uint: + return slice_any_to_string(values) + case []float32: + return slice_any_to_string(values) + case []float64: + return slice_any_to_string(values) + case []bool: + return slice_any_to_string(values) + case []string: + return values + default: + vv := reflect.ValueOf(v) + vk := vv.Kind() + panic(exception.New(errorFloat64Base+0, fmt.Sprintf("Unsupported type: %s", vk.String()))) + } + return []string{} +} -- Gitee