From c55785783d44a0843d1a322d6678ca3e49965425 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 2 Feb 2023 11:24:03 +0800 Subject: [PATCH 1/5] 1 --- pkg/common/db/table/relation.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pkg/common/db/table/relation.go b/pkg/common/db/table/relation.go index 052c9cc05..1deaf7869 100644 --- a/pkg/common/db/table/relation.go +++ b/pkg/common/db/table/relation.go @@ -13,6 +13,7 @@ type FriendModel struct { OperatorUserID string `gorm:"column:operator_user_id;size:64"` Ex string `gorm:"column:ex;size:1024"` } + type ConversationModel struct { OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"` ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"` @@ -50,6 +51,31 @@ type GroupModel struct { NotificationUserID string `gorm:"column:notification_user_id;size:64"` } +func (f *GroupModel) EqID(i interface{}) bool { + switch v := i.(type) { + case GroupModel: + return f.GroupID == v.GroupID + case *GroupModel: + return f.GroupID == v.GroupID + default: + return false + } +} + +func DuplicateRemoval[T any](arr []T, fn func(t T) string) { + +} + +func aaa() { + DuplicateRemoval([]GroupModel{}, func(t GroupModel) string { + return t.GroupID + }) + + DuplicateRemoval([]*GroupModel{}, func(t *GroupModel) string { + return t.GroupID + }) +} + type FriendRequestModel struct { FromUserID string `gorm:"column:from_user_id;primary_key;size:64"` ToUserID string `gorm:"column:to_user_id;primary_key;size:64"` From eb3bb7948fe1b07d626102332d143c93e75422cf Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 2 Feb 2023 11:47:27 +0800 Subject: [PATCH 2/5] 1 --- pkg/utilsv2/slice.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pkg/utilsv2/slice.go diff --git a/pkg/utilsv2/slice.go b/pkg/utilsv2/slice.go new file mode 100644 index 000000000..7fdbb45ff --- /dev/null +++ b/pkg/utilsv2/slice.go @@ -0,0 +1,53 @@ +package utilsv2 + +//func DuplicateRemoval[T comparable](ts []T) []T { +// v := make([]T, 0, len(ts)) +// tmp := map[T]struct{}{} +// for _, t := range ts { +// if _, ok := tmp[t]; !ok { +// tmp[t] = struct{}{} +// v = append(v, t) +// } +// } +// return v +//} + +func DuplicateRemovalAny[T any, V comparable](ts []T, fn func(t T) V) []T { + v := make([]T, 0, len(ts)) + tmp := map[V]struct{}{} + for _, t := range ts { + k := fn(t) + if _, ok := tmp[k]; !ok { + tmp[k] = struct{}{} + v = append(v, t) + } + } + return v +} + +func DuplicateRemoval[T comparable](ts []T) []T { + return DuplicateRemovalAny(ts, func(t T) T { + return t + }) +} + +func DeleteAt[T any](ts []T, index ...int) []T { + l := len(ts) + switch len(index) { + case 0: + return ts + case 1: + return append(ts[:index[0]], ts[index[0]+1:]...) + default: + tmp := make(map[int]struct{}) + for _, v := range index { + tmp[v] = struct{}{} + } + v := make([]byte) + for i, t := range ts { + + } + + } + return nil +} From 26b5ed72df2b4dec72bbb665653e467d23d74882 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 2 Feb 2023 11:52:00 +0800 Subject: [PATCH 3/5] 1 --- pkg/utilsv2/slice.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/utilsv2/slice.go b/pkg/utilsv2/slice.go index 7fdbb45ff..4d1dca3ac 100644 --- a/pkg/utilsv2/slice.go +++ b/pkg/utilsv2/slice.go @@ -1,5 +1,7 @@ package utilsv2 +import "Open_IM/pkg/common/db/table" + //func DuplicateRemoval[T comparable](ts []T) []T { // v := make([]T, 0, len(ts)) // tmp := map[T]struct{}{} @@ -31,8 +33,17 @@ func DuplicateRemoval[T comparable](ts []T) []T { }) } +func demo() { + + groups := []*table.GroupModel{} + + groups = DuplicateRemovalAny(groups, func(t *table.GroupModel) string { + return t.GroupID + }) + +} + func DeleteAt[T any](ts []T, index ...int) []T { - l := len(ts) switch len(index) { case 0: return ts @@ -43,7 +54,6 @@ func DeleteAt[T any](ts []T, index ...int) []T { for _, v := range index { tmp[v] = struct{}{} } - v := make([]byte) for i, t := range ts { } From dab552aed4d723f4f6cb9a7b6b4f6c3fd7208e15 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 2 Feb 2023 11:55:48 +0800 Subject: [PATCH 4/5] 1 --- pkg/utilsv2/demo.go | 13 +++++++++++++ pkg/utilsv2/slice.go | 37 ++++++++----------------------------- 2 files changed, 21 insertions(+), 29 deletions(-) create mode 100644 pkg/utilsv2/demo.go diff --git a/pkg/utilsv2/demo.go b/pkg/utilsv2/demo.go new file mode 100644 index 000000000..0979d390e --- /dev/null +++ b/pkg/utilsv2/demo.go @@ -0,0 +1,13 @@ +package utilsv2 + +import "Open_IM/pkg/common/db/table" + +func demo() { + + groups := []*table.GroupModel{} + + groups = DuplicateRemovalAny(groups, func(t *table.GroupModel) string { + return t.GroupID + }) + +} diff --git a/pkg/utilsv2/slice.go b/pkg/utilsv2/slice.go index 4d1dca3ac..96245a276 100644 --- a/pkg/utilsv2/slice.go +++ b/pkg/utilsv2/slice.go @@ -1,23 +1,10 @@ package utilsv2 -import "Open_IM/pkg/common/db/table" - -//func DuplicateRemoval[T comparable](ts []T) []T { -// v := make([]T, 0, len(ts)) -// tmp := map[T]struct{}{} -// for _, t := range ts { -// if _, ok := tmp[t]; !ok { -// tmp[t] = struct{}{} -// v = append(v, t) -// } -// } -// return v -//} - func DuplicateRemovalAny[T any, V comparable](ts []T, fn func(t T) V) []T { v := make([]T, 0, len(ts)) tmp := map[V]struct{}{} - for _, t := range ts { + for i := 0; i < len(ts); i++ { + t := ts[i] k := fn(t) if _, ok := tmp[k]; !ok { tmp[k] = struct{}{} @@ -33,16 +20,6 @@ func DuplicateRemoval[T comparable](ts []T) []T { }) } -func demo() { - - groups := []*table.GroupModel{} - - groups = DuplicateRemovalAny(groups, func(t *table.GroupModel) string { - return t.GroupID - }) - -} - func DeleteAt[T any](ts []T, index ...int) []T { switch len(index) { case 0: @@ -54,10 +31,12 @@ func DeleteAt[T any](ts []T, index ...int) []T { for _, v := range index { tmp[v] = struct{}{} } - for i, t := range ts { - + v := make([]T, 0, len(ts)) + for i := 0; i < len(ts); i++ { + if _, ok := tmp[i]; !ok { + v = append(v, ts[i]) + } } - + return v } - return nil } From c1af64854cd9f4d618ef0b5af24a0bc9ae6a4dfb Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 2 Feb 2023 12:00:18 +0800 Subject: [PATCH 5/5] 1 --- pkg/utilsv2/slice.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/utilsv2/slice.go b/pkg/utilsv2/slice.go index 96245a276..4aae4c4da 100644 --- a/pkg/utilsv2/slice.go +++ b/pkg/utilsv2/slice.go @@ -25,11 +25,21 @@ func DeleteAt[T any](ts []T, index ...int) []T { case 0: return ts case 1: + i := index[0] + if len(ts) <= i || len(ts) < -i { + return ts + } + if i < 0 { + i = len(ts) + i + } return append(ts[:index[0]], ts[index[0]+1:]...) default: tmp := make(map[int]struct{}) - for _, v := range index { - tmp[v] = struct{}{} + for _, i := range index { + if i < 0 { + i = len(ts) + i + } + tmp[i] = struct{}{} } v := make([]T, 0, len(ts)) for i := 0; i < len(ts); i++ {