当使用某些资源时,我需要跟踪打开和关闭状态。我使用的第一个结构是两个open_states_list
和closed_states_list
,它们在状态更新时会添加和删除。
open_states_list.append(x)
。 open_states_list.remove(x)
。x in open_states_list
。我使用的第二个结构是具有布尔值open_states = {}
的单个字典,其中如果open_states[x]
是True
,则x
是打开的,如果{{1} },然后将其关闭。
False
。open_states[x] = True
。open_states[x] = False
。open_states[x]
。我们最常见的操作是检查[x for x, s in open_states.iteritems() if s]
是否打开(搜索),因此第二种选择更好。但是,在第二种最常见的操作中,获取打开状态或使用状态的列表非常紧密地跟随搜索操作,在第一种选择中效率更高。但是,我们无法选择第一个选项,因为检查资源的状态为O(n)。
插入也很常见。删除不是必需的。
满足这些需求的最有效的数据结构是什么?