unique_uploader_sort.go 940 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package sort
  2. import (
  3. "errors"
  4. "gitlab.alibaba-inc.com/pai_biz_arch/pairec/module"
  5. psort "gitlab.alibaba-inc.com/pai_biz_arch/pairec/sort"
  6. )
  7. type SUniqueUploaderSort struct {
  8. }
  9. func UniqueUploaderSort() *SUniqueUploaderSort {
  10. return &SUniqueUploaderSort{}
  11. }
  12. func (s *SUniqueUploaderSort) Sort(sortData *psort.SortData) error {
  13. if _, ok := sortData.Data.([]*module.Item); !ok {
  14. return errors.New("sort data type error")
  15. }
  16. return s.doSort(sortData)
  17. }
  18. // 将已存在的up主的视频过滤掉,不连续出现
  19. func (s *SUniqueUploaderSort) doSort(sortData *psort.SortData) error {
  20. items := sortData.Data.([]*module.Item)
  21. newItems := make([] *module.Item, 0)
  22. uniq := make(map[string]bool)
  23. for _, i := range items {
  24. uploader := i.Properties["uid"].(string)
  25. //if unq[uploader] {
  26. if _, ok := uniq[uploader]; !ok{
  27. uniq[uploader] = true
  28. newItems = append(newItems, i)
  29. }
  30. }
  31. sortData.Data = newItems
  32. return nil
  33. }