gpt4 book ai didi

检查位数组状态的 C# 性能和最佳实践

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:41 25 4
gpt4 key购买 nike

这是我的问题:

  • 我有两个类:ClassObjClassProperty
  • ClassObj 的属性之一(我们称之为 lstProperty)是 ClassPropertyList(表示对象的当前实例具有的属性);
  • 在运行时,我在某处存储了所有可能的 ClassPropertyArray,我们将调用此 Array arrPossibleProperty .

我的问题是找到一种真正快速的方法来检查 ClassObj 的实例是否匹配一组特定的 ClassProperty(如果他在他的 lstProperty 给定集合的所有 ClassProperty

我正在考虑创建一个 arrayBit 代表 ClassObj 拥有的 ClassProperty 序列。使用 Array arrPossibleProperty 和他的 Property 的索引作为引用。

例如,如果我们有 10 个属性,ClassObjInstanceA 有第 1 个、第 4 个和第 9 个,我将生成这个位数组:1001000010

我的问题是,我如何检查(例如,最快和性能最好的解决方案)位数组是否具有(例如)第 3 和第 4 个属性?

当然,如果您需要更高效的方法,请告诉我。

最佳答案

您需要使用位运算,例如 &|^~ (根据您的需要)

以 1001000010 为例,要确定第 3 位是否已设置,您需要这样做:1001000010 & 0000000100 != 0000000000,或者更确切地说

bool isSet = myProperty & (1 << (option - 1)) != 0; // to find out if `myProperty` has the property `option` set.
myProperty |= 1 << (option - 1); // to set property `option`

有关按位运算的更多信息:http://en.wikipedia.org/wiki/Bitwise_operation

或者使用枚举更容易实现。

[Flags]
enum ClassProperty
{
None = 0x00,
First = 0x01,
Second = 0x02,
Third = 0x04,
Fourth = 0x08
// add more if needed
}

然后,您将像这样使用枚举

myProperty = ClassProperty.First | ClassProperty.Second; // sets both First and Second
bool thirdIsSet = myProperty.HasFlag(ClassProperty.Third);

关于检查位数组状态的 C# 性能和最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com