change Join function feature for garray

This commit is contained in:
John
2019-10-11 23:17:29 +08:00
parent 5092d8e6c5
commit b08d7c3c38
8 changed files with 73 additions and 29 deletions

View File

@ -584,14 +584,8 @@ func (a *Array) Join(glue string) string {
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
s := ""
for k, v := range a.array {
s = gconv.String(v)
if gstr.IsNumeric(s) {
buffer.WriteString(s)
} else {
buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`)
}
buffer.WriteString(gconv.String(v))
if k != len(a.array)-1 {
buffer.WriteString(glue)
}
@ -612,7 +606,24 @@ func (a *Array) CountValues() map[interface{}]int {
// String returns current array as a string.
func (a *Array) String() string {
return "[" + a.Join(",") + "]"
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
buffer.WriteByte('[')
s := ""
for k, v := range a.array {
s = gconv.String(v)
if gstr.IsNumeric(s) {
buffer.WriteString(s)
} else {
buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`)
}
if k != len(a.array)-1 {
buffer.WriteString(",")
}
}
buffer.WriteByte(']')
return buffer.String()
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.

View File

@ -592,7 +592,7 @@ func (a *StrArray) Join(glue string) string {
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
for k, v := range a.array {
buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`)
buffer.WriteString(v)
if k != len(a.array)-1 {
buffer.WriteString(glue)
}
@ -613,7 +613,18 @@ func (a *StrArray) CountValues() map[string]int {
// String returns current array as a string.
func (a *StrArray) String() string {
return "[" + a.Join(",") + "]"
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
buffer.WriteByte('[')
for k, v := range a.array {
buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`)
if k != len(a.array)-1 {
buffer.WriteString(",")
}
}
buffer.WriteByte(']')
return buffer.String()
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.

View File

@ -529,14 +529,8 @@ func (a *SortedArray) Join(glue string) string {
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
s := ""
for k, v := range a.array {
s = gconv.String(v)
if gstr.IsNumeric(s) {
buffer.WriteString(s)
} else {
buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`)
}
buffer.WriteString(gconv.String(v))
if k != len(a.array)-1 {
buffer.WriteString(glue)
}
@ -557,7 +551,24 @@ func (a *SortedArray) CountValues() map[interface{}]int {
// String returns current array as a string.
func (a *SortedArray) String() string {
return "[" + a.Join(",") + "]"
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
buffer.WriteByte('[')
s := ""
for k, v := range a.array {
s = gconv.String(v)
if gstr.IsNumeric(s) {
buffer.WriteString(s)
} else {
buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`)
}
if k != len(a.array)-1 {
buffer.WriteString(",")
}
}
buffer.WriteByte(']')
return buffer.String()
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.

View File

@ -517,7 +517,7 @@ func (a *SortedStrArray) Join(glue string) string {
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
for k, v := range a.array {
buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`)
buffer.WriteString(v)
if k != len(a.array)-1 {
buffer.WriteString(glue)
}
@ -538,7 +538,18 @@ func (a *SortedStrArray) CountValues() map[string]int {
// String returns current array as a string.
func (a *SortedStrArray) String() string {
return "[" + a.Join(",") + "]"
a.mu.RLock()
defer a.mu.RUnlock()
buffer := bytes.NewBuffer(nil)
buffer.WriteByte('[')
for k, v := range a.array {
buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`)
if k != len(a.array)-1 {
buffer.WriteString(",")
}
}
buffer.WriteByte(']')
return buffer.String()
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.

View File

@ -261,7 +261,7 @@ func TestArray_Join(t *testing.T) {
gtest.Case(t, func() {
a1 := []interface{}{0, 1, `"a"`, `\a`}
array1 := garray.NewArrayFrom(a1)
gtest.Assert(array1.Join("."), `0.1."\"a\""."\\a"`)
gtest.Assert(array1.Join("."), `0.1."a".\a`)
})
}

View File

@ -248,12 +248,12 @@ func TestStrArray_Join(t *testing.T) {
gtest.Case(t, func() {
a1 := []string{"0", "1", "2", "3", "4", "5", "6"}
array1 := garray.NewStrArrayFrom(a1)
gtest.Assert(array1.Join("."), `"0"."1"."2"."3"."4"."5"."6"`)
gtest.Assert(array1.Join("."), `0.1.2.3.4.5.6`)
})
gtest.Case(t, func() {
a1 := []string{"0", "1", `"a"`, `\a`}
array1 := garray.NewStrArrayFrom(a1)
gtest.Assert(array1.Join("."), `"0"."1"."\"a\""."\\a"`)
gtest.Assert(array1.Join("."), `0.1."a".\a`)
})
}

View File

@ -394,14 +394,14 @@ func TestSortedArray_Join(t *testing.T) {
return strings.Compare(gconv.String(v1), gconv.String(v2))
}
array1 := garray.NewSortedArrayFrom(a1, func1)
gtest.Assert(array1.Join(","), `"a","c","d"`)
gtest.Assert(array1.Join("."), `"a"."c"."d"`)
gtest.Assert(array1.Join(","), `a,c,d`)
gtest.Assert(array1.Join("."), `a.c.d`)
})
gtest.Case(t, func() {
a1 := []interface{}{0, 1, `"a"`, `\a`}
array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorString)
gtest.Assert(array1.Join("."), `"\"a\"".0.1."\\a"`)
gtest.Assert(array1.Join("."), `"a".0.1.\a`)
})
}

View File

@ -290,14 +290,14 @@ func TestSortedStrArray_Join(t *testing.T) {
gtest.Case(t, func() {
a1 := []string{"e", "a", "d"}
array1 := garray.NewSortedStrArrayFrom(a1)
gtest.Assert(array1.Join(","), `"a","d","e"`)
gtest.Assert(array1.Join("."), `"a"."d"."e"`)
gtest.Assert(array1.Join(","), `a,d,e`)
gtest.Assert(array1.Join("."), `a.d.e`)
})
gtest.Case(t, func() {
a1 := []string{"a", `"b"`, `\c`}
array1 := garray.NewSortedStrArrayFrom(a1)
gtest.Assert(array1.Join("."), `"\"b\""."\\c"."a"`)
gtest.Assert(array1.Join("."), `"b".\c.a`)
})
}