微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这是使用Nim ref数据结构的有效方法吗?

如何解决这是使用Nim ref数据结构的有效方法吗?

我在记忆中保存着庞大的公司清单,并且需要做很多操作来获得单个公司。

就像用符号“ MSFT”获得单个公司“ Microsoft”一样。

下面的数据结构是建模的合适方法吗?整个listmap的按值复制。

可以通过价值复制单个公司。

import tables

type
  Company = object
    name:        string
    symbol:      string
    description: string

  CompaniesRef = ref object
    list: seq[Company]
    map:  Table[string,Company]

# Cached data structure to keep thousands of different companies
var cached_companies: CompaniesRef
proc companies(): CompaniesRef =
  if cached_companies == nil:
    # Here will be a proper code of loading companies into the 
    # CompaniesRef data structure
    cached_companies = CompaniesRef()
  cached_companies

# Lots of operations of getting a specific company from the list
# or from the map by its symbol
for i in 1..1000:
  # it's ok if individual company will be copied by value,# but the whole list should be passed by reference
  let company1 = companies().list[0].name

  # it's ok if individual company will be copied by value
  # but the whole map should be passed by reference
  let company2 = companies().map["MSFT"]

解决方法

该全局结构应该是正确的,对象引用只是一个内存管理的指针,因此传递其引用仅会复制内存地址。除非您打算使用该指针做某事,否则为什么不将其创建为全局指针呢?将其隐藏在我很怕全局但无法在没有它们的情况下生存模式的proc调用后。

let companies = CompaniesRef()

关于结构的内容,您要为每个Company对象存储两次,您可能希望将对Company的引用存储在Table中,或仅使用{ {3}},如果您需要保持插入键的顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。