登录
首页 >  Golang >  Go问答

GoLang 附加到嵌套切片

来源:stackoverflow

时间:2024-04-28 23:48:34 270浏览 收藏

大家好,我们又见面了啊~本文《GoLang 附加到嵌套切片》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

在 golang 中,具有以下结构和方法,我尝试附加到属于嵌套在另一个结构中的结构的切片:

/* tiers agent struct */
type agent struct {
    registration string
}

/* tiers queue struct */
type queue struct {
    name string
    agents []agent
}

/* tiers struct */
type tiers struct {
    queues []queue
}

func (q *queue) addagent (agent_registration string) {

    q.agents = append(q.agents, agent{registration: agent_registration})
}

func (t *tiers) addqueue(queue_name string, agent_registration string) {

    var cur_queue *queue

    found_queue := false

    /* find queue by queue name */
    for _ , queue := range t.queues {
        if queue.name == queue_name {
            found_queue = true
            cur_queue = &queue
        }
    }

    /* if queue not found, create a new one */
    if found_queue == false {
        t.queues = append(t.queues, queue{name: queue_name})
        cur_queue = &(t.queues[len(t.queues)-1])
    }

    /* add agent to queue (add tier) */
    cur_queue.addagent(agent_registration)
}

我的业务规则是,我将收到大量 {queue_name, agent_name} 对,并且我想构建一个结构,将共享相同“queue_name”的所有代理分组。所以,最终我想要这样的东西:

队列1:['代理1','代理2','代理3',...] 队列2:['agent4','agent5',...]

我正在使用上面提到的结构对此进行建模。问题是当我尝试将代理添加到队列时,只有最后一个插入仍然存在。示例:

tiers.AddQueue('suport@default', '1000@default')
tiers.AddQueue('suport@default', '1003@default')
tiers.AddQueue('suport@default', '1001@default')

输出:{[{support@default [{1001@default}]}]}

当我想要的是输出时:

输出:{[{support@default [{1000@default},{1003@default}, {1001@default}]}]}

块引用>

解决方案


你的问题是这样的:

for _ , queue := range t.queues {

将值从 t.queues 复制到 queue,然后获取该副本的地址:

cur_queue = &queue

最终修改副本,同时将 t.queues 切片中的 queue 单独保留。

一个简单的解决方案是使用 for i := range ... 形式的循环,并获取切片中 queue 的地址而不是副本:

for i := range t.queues {
    if t.queues[i].name == queue_name {
        found_queue = true
        cur_queue = &t.queues[i]
    }
}

您还可以使用指针切片并返回到您的

for _ , queue := range t.queues {

循环中 queue 已经是一个指针。

一旦发现某些内容,您可能希望尽早将 break 退出循环。如果 t.queues 预计会很大,您可能需要切换到地图,这样就不会进行太多的线性搜索。

终于介绍完啦!小伙伴们,这篇关于《GoLang 附加到嵌套切片》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>