List 结合字典的枚举标志

List 结合字典的枚举标志,list,optimization,dictionary,enum-flags,List,Optimization,Dictionary,Enum Flags,我找不到一个简单的方法来定义我的问题,但我会尽力解释 我需要能够表示预定义项目的选择,我在程序中有数千个这样的选择实例,并且需要一个值来表示每个实例的项目选择(许多选择将重复) 在这一点上,我使用Enum的第一个解决方案似乎还可以,但我似乎有一个问题。。。Enum标志表示为每个唯一项一位,64位是语言可以为Enum(C#)处理的最大值,我有任意数量的值需要设置和取消设置 示例解决方案1: //Two dimensional map of instances Instances[,] //Ite

我找不到一个简单的方法来定义我的问题,但我会尽力解释

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

在这一点上,我使用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、1、2、3、4、5}
//项目列表添加
清单项目
Items.Add(Item.0)
项目。添加(项目1)
//将项目添加到选择中
选择。添加(项目)
//设置所选内容
实例[10001000]。选择=//选择中项目列表的ID
//查看项目是否在所选范围内
选择[实例[10001000]。选择]。包含(项1)
该解决方案的要求是内存使用率低(我正在为一个移动应用程序开发这个),易用性(我需要能够动态编辑它)

考虑到我的要求和需求,哪种解决方案最好
我如何才能做到这一点,或者简化它以满足我的要求?

这取决于具体情况。是否所有2^n可能性都同样可能发生,或者是否有一些好的属性(例如“通常很少一次设置”或“设置的项目通常形成长时间运行”)可利用?@harold否设置这些项目的位置完全是随机的,由用户输入设置,但通常(不总是)设置这些项目的位置会在选定区域重复。我想你可以把它想象成绘画区域,选择的项目是选择的颜色,二维数组是画布。好吧,那么我有一个不同的想法:每个项目都有一个四叉树。这将很好地压缩这些区域。