• Go Slice 排除异己


    产品经理:书接上回,时间轴功能是实现了,很好👍

                                                                                                      哪里哪里,都是同行的衬托 :小猿

    产品经理:但是,时间轴展示的事件太杂了,需要加一下过滤

    产品经理:别把自己上班期间的吃喝玩乐的, 都展示出来

                                                       OK,我一定严于律己,隐藏实力,不暴漏,争做优秀员工:小猿   产品经理:哦,对了,忘了告诉你了。

    产品经理:老板着重强调了,经济下行,公司上下同命运,工作要积极

                                                                                                                                      ---------- :小猿


                                       宗旨:满足产品经理的一切不切实际的幻想


     上干货,别啰嗦。

    示例数据:

    需求:

            对示例数据中,show字段进行判断,如果show=2,则剔除

    解决办法:

             方法一:

    1. resp := make([]*Data, 0)
    2. for _, v := range data {
    3. if v.Show == IsShow {
    4. resp = append(resp, v)
    5. }
    6. }

    步骤详解:

    1. 定义新的slice,存储数据
    2. 遍历数据,判断是否需要剔除
    3. 追加元素数据到新的slice 

    优点:

    1. 简洁明了,一看就懂,一写就会,一点就透,一说就没完~~~
    2. 不影响原数据

     缺点:

    1. 开辟新的天地,在有限的资源里,为自己争夺生存空间。(浪费内存)


       方法二:

    1. // 有效需保留的下标
    2. i := 0
    3. for _, v := range data {
    4. if v.Show != IsShow {
    5. continue
    6. }
    7. // 数据重写
    8. data[i] = v
    9. // 有效下标自增
    10. i++
    11. }
    12. // 对重写后的数据slice,进行截取
    13. data = data[:i]

    步骤详解:

    1. 定义初始化下标(标记有效需保留的数据)
    2. 遍历数据
      1. 判断是否需要剔除
      2. 下标数据重写
      3. 下标自增
    3. 对重写后的数据slice,进行截取

    优点:

    1. 自我蜕变,内部化解矛盾。(对原slice进行操作)

    缺点:

    1.  与方法一,相辅相成。缺点就是 改变了原数据。

    完整示例:

    1. package main
    2. import (
    3. "encoding/json"
    4. "fmt"
    5. "sort"
    6. )
    7. type Data struct {
    8. Id int32 `json:"id"`
    9. Username string `json:"username"`
    10. Event string `json:"event"`
    11. Show int32 `json:"show"`
    12. Datetime string `json:"datetime"`
    13. Timestamp int64 `json:"timestamp"`
    14. }
    15. const (
    16. IsShow = 1
    17. UnShow = 2
    18. )
    19. func main() {
    20. // 我的一天
    21. data := SortData()
    22. // 示例一
    23. // 有效需保留的下标
    24. i := 0
    25. for _, v := range data {
    26. if v.Show != IsShow {
    27. continue
    28. }
    29. // 元素数据,重写
    30. data[i] = v
    31. // 有效下标自增
    32. i++
    33. }
    34. // 对重写后的数据slice,进行截取
    35. data = data[:i]
    36. // 输出
    37. s, _ := json.Marshal(data)
    38. fmt.Printf(string(s))
    39. }
    40. func SortData() (resp []*Data) {
    41. myDay := make([]*Data, 0, 6)
    42. myDay = append(myDay, GetGirlfriend()...)
    43. myDay = append(myDay, GetLife()...)
    44. // 时间 slice
    45. timestamp := make([]int, 0)
    46. // data map
    47. dataMap := make(map[int64]*Data)
    48. for _, v := range myDay {
    49. timestamp = append(timestamp, int(v.Timestamp))
    50. dataMap[v.Timestamp] = v
    51. }
    52. // 排序(正序)
    53. sort.Ints(timestamp)
    54. // 格式化数据
    55. resp = make([]*Data, 0, 6)
    56. for _, value := range timestamp {
    57. if info, ok := dataMap[int64(value)]; ok {
    58. resp = append(resp, info)
    59. }
    60. }
    61. return resp
    62. }
    63. // GetGirlfriend 生活
    64. func GetGirlfriend() (resp []*Data) {
    65. resp = make([]*Data, 3)
    66. resp = []*Data{
    67. {
    68. Id: 1,
    69. Username: "如花",
    70. Event: "摸鱼-约逛街",
    71. Show: UnShow,
    72. Datetime: "2022-11-09 14:00",
    73. Timestamp: 1667973600000,
    74. },
    75. {
    76. Id: 2,
    77. Username: "如花",
    78. Event: "吃火锅",
    79. Show: UnShow,
    80. Datetime: "2022-11-09 18:30",
    81. Timestamp: 1667989800000,
    82. },
    83. {
    84. Id: 3,
    85. Username: "如花",
    86. Event: "看电影",
    87. Show: IsShow,
    88. Datetime: "2022-11-09 20:30",
    89. Timestamp: 1667997000000,
    90. },
    91. }
    92. return
    93. }
    94. // GetLife 活着
    95. func GetLife() (resp []*Data) {
    96. resp = make([]*Data, 3)
    97. resp = []*Data{
    98. {
    99. Id: 1,
    100. Username: "仙儿",
    101. Event: "沟通需求v1.0",
    102. Show: IsShow,
    103. Datetime: "2022-11-09 14:30",
    104. Timestamp: 1667975400000,
    105. },
    106. {
    107. Id: 2,
    108. Username: "仙儿",
    109. Event: "讨论技术方案",
    110. Show: IsShow,
    111. Datetime: "2022-11-09 16:00",
    112. Timestamp: 1667980800000,
    113. },
    114. {
    115. Id: 3,
    116. Username: "仙儿",
    117. Event: "写PPT",
    118. Show: IsShow,
    119. Datetime: "2022-11-09 17:30",
    120. Timestamp: 1667986200000,
    121. },
    122. }
    123. return
    124. }

    打印结果:


    我为人人,人人为我,美美与共,天下大同。

  • 相关阅读:
    win10 下 ipmitool 1.8.19编译
    osgEarth示例分析——osgearth_colorfilter
    15天深度复习JavaWeb的详细笔记(六)——HTTP、Tomcat、Servlet
    Java替换 html 中隐藏的空格字符
    Java TCP长连接详解:实现稳定、高效的网络通信
    JavaScript基础(6)_流程控制语句
    java毕业设计成品基于JSP+SSH框架的城市公交查询系统[包运行成功]
    JavaScript客户端操作
    MyBatis总结
    简述JDK,JRE,JVM的关系
  • 原文地址:https://blog.csdn.net/qq_37837134/article/details/127805635