枚举标志与词典结合

时间:2012-09-22 16:34:04

标签: list optimization dictionary enum-flags

无法找到一种简单的方法来定义我的问题,但我会尽力解释它。

我需要能够表示一系列预定义项目,我在程序中有数千个这样的选择实例,并且需要一个可以表示每个实例的项目选择的值(许多选项将重复)。

我使用Enum的第一个解决方案在这一点似乎没问题,但我似乎有一个问题...... Enum标志表示为每个唯一项目一位,64位是语言可以处理Enum的最大值(C# ),我有任意数量的值需要设置和取消设置。

示例解决方案1:

//Two dimensional map of instances
Instances[,]

//Item Enum Flags
Items { 0, 1, 2, 4 }

//Setting the selection
Instances[1000,1000].Selection.Set(Items.1)
Instances[1000,1000].Selection.Set(Items.2)

Instances[1000,1000].Selection.IsSet(Items.1) = true
Instances[1000,1000].Selection.IsSet(Items.2) = true

我的第二个解决方案是建立选择列表并使用ID号在实例中引用此选择。

示例解决方案2:

//Two dimensional map of instances
Instances[,]

//Dictionary 
Dictionary<ID, List<Item>> Selections

//Enum for items (not flags)
Item { 0, 1, 2, 3, 4, 5 }

//Item list add
List<Item> Items
Items.Add(Item.0)      
Items.Add(Item.1)

//Add Items to selections
Selections.Add(Items)

//Setting the selection
Instances[1000,1000].Selection = //ID of item list in Selections

//See if item is within selection
Selections[Instances[1000,1000].Selection].Contains(Item.1)

解决方案的要求是内存使用率低(我正在为移动应用程序开发),易于使用(我需要能够动态编辑它)。

哪种解决方案最好,考虑到我的要求和 我如何实现这一目标,或者简化它以满足我的要求?

0 个答案:

没有答案