【问题标题】:Implementing sets of structs within a map of structs在结构映射中实现结构集
【发布时间】:2016-12-20 15:27:02
【问题描述】:

我有一个结构图如下:

type SocketID string
type Socket struct {
    socket //...
    id     string
}

type Channel struct {
    sync.Mutex
    sockets map[SocketID]Socket
}

我希望能够向其中添加子频道,其中每个Socket 属于一个子频道。我尝试将通道结构更改为:

type SubchannelID string
type Channel struct {
    sync.Mutex
    sockets     map[SocketID]Socket
    subchannels map[SubchannelID]map[SocketID]Socket
}

但是我遇到的问题是从Channel 中删除Socket 成为O(n^2) 操作,并且每个套接字在socketssubchannels 映射之间重复。我将如何优化这一点,同时保持通道和子通道远离套接字?

【问题讨论】:

    标签: go struct interface


    【解决方案1】:

    没关系,答案很简单:

    struct Channel {
        sync.Mutex
        sockets     map[SocketID]Socket
        subchannels map[SocketID]SubchannelID
    }
    
    func (c Channel) Remove(sid SocketID) {
        c.Lock()
        defer c.Unlock()
    
        if _, ok := c.sockets[sid]; ok {
            delete(c.sockets, sid)
        }
        if _, ok := c.subchannels[sid]; ok {
            delete(c.subchannels, sid)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2015-07-02
      • 1970-01-01
      • 2014-10-03
      相关资源
      最近更新 更多