V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
heloman
V2EX  ›  问与答

什么数据结构即可以有序遍历又可以快速查找?

  •  
  •   heloman · 2015-10-27 12:34:31 +08:00 · 3290 次点击
    这是一个创建于 3347 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要存储的数据格式为(int id, int time, string name),现需要:

    1 , 能够按 time 顺序遍历
    2 , 能够快速使用 id 删除对应的 time 和 name

    请问什么数据结构能够实现这个目标?使用 c#,最好利用自有的数据结构 3q~

    10 条回复    2015-10-27 16:37:34 +08:00
    FrankFang128
        1
    FrankFang128  
       2015-10-27 12:49:58 +08:00
    SQL 数据库哇……
    xi_lin
        2
    xi_lin  
       2015-10-27 13:13:15 +08:00
    存两份。。
    c742435
        3
    c742435  
       2015-10-27 13:19:25 +08:00
    存两份靠谱
    wshcdr
        4
    wshcdr  
       2015-10-27 13:41:54 +08:00
    C# ArrayList
    nathanw
        5
    nathanw  
       2015-10-27 13:59:28 +08:00
    散列表
    pi1ot
        6
    pi1ot  
       2015-10-27 14:01:26 +08:00
    听起来类似 memcached ,可以一套数据,两套索引。
    PublicID
        7
    PublicID  
       2015-10-27 14:01:49 +08:00 via Android
    Time->name RBT
    Id->time RBT/HASH

    数据规模多少?
    heloman
        8
    heloman  
    OP
       2015-10-27 14:21:48 +08:00
    @nathanw 具体怎么做呢?

    @pi1ot
    @PublicID

    3q ,数据规模应该不超过 10k ,还有忘了说了一点,添加新数据的时间就是 time

    两套索引的办法确实不错!
    如果两套结构的话,倒是想起来一个办法:可以做一个 queue ,按照数据产生时间插入 queue ,再多余存储一个可用 id 的 set ,删除时只删除 set 中的 id ,遍历时检查 id ,如果不在 set 中则从 queue 中删除
    caoyue
        9
    caoyue  
       2015-10-27 14:58:32 +08:00
    @heloman
    「添加新数据的时间就是 time 」
    或许你可以看看 OrderedDictionary
    WalkingEraser
        10
    WalkingEraser  
       2015-10-27 16:37:34 +08:00
    Java 的 LinkedHashMap ,(手动斜眼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2556 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:48 · PVG 23:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.