【问题标题】:How do i remove duplicate valeus in push?如何删除推送中的重复值?
【发布时间】:2022-01-22 14:23:57
【问题描述】:

这可能是菜鸟问题...

如何删除重复值而不是推送值?

当值为:("lorem", "ipsum", 1, 1, 1, "jack", "jill", "felix", "donking")
它应该打印:("lorem", "ipsum", 1, "jack", "jill", "felix", "donking")

如何去除上述推送功能中的重复值?

// Push values
func (q *Data) Push(n interface{}) *Data {
    if q.Len() < q.size {
        q.data = append(q.data, n)
        if q.data[q.Len()] == q.data[q.Len()+1] {
            q.Pop()
            q.Push(n)
        }
    } else {
        q.Pop()
        q.Push(n)
    }
    return q
}

【问题讨论】:

  • 你想做什么?创建一个类似列表的数据结构来删除重复值?
  • 我正在尝试制作独特的队列。删除传入的重复值。例如上面的数据,我需要删除传入的 1 以使其唯一。

标签: go duplicates


【解决方案1】:

每个数据结构都使用底层原始数据结构来实现,看起来你正在使用切片。如果您只想保存唯一数据,则应使用map。为了在仅使用地图查找重复项时尽可能高效,您可以使用map[interface{}]struct{}

【讨论】:

  • My Code 这是我的代码。我仍在研究如何注入重复值代码。
  • 您应该像我之前所说的那样添加一个映射,并且当您在 Push 方法中插入一个新值时,检查该映射是否包含该值,如果是,请不要插入它,如果没有,插入它。
【解决方案2】:

需要根据推送的值检查队列中的数据。如果数据已经在队列中,它应该返回。

for i := range q.data {
    if q.data[i] == n {
        return q // return q when n value is found equal to one of q.data values.
    }
}
q.data = append(q.data, n)

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2020-11-24
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多